【问题标题】:Table Specialization with LaravelLaravel 的表专业化
【发布时间】:2017-01-08 19:40:50
【问题描述】:

使用 mySql,我创建了 3 个表:vehiclescarsbikes。 表 carsbikes 是表 vehicles(子表)的特化。

vehicles 有一个名为 id 的主键。

carsbikes 没有主键。相反,它们还有一个名为 id 的字段,上面有一个索引,其中包含与 vehicles.id 相同的值,用作外键。

使用 Laravel 5.3 框架,我尝试先在 vehicles 中插入一条新记录,然后在 cars 中插入一条新记录,如下所示:

$id = Vehicle::create(['name'=>'volvo'])->id;
Car::create(['id'=>$id, 'nbDoors'=>4]);

我收到以下错误:

Connection.php 第 770 行中的 QueryException: SQLSTATE[HY000]:一般错误:1364 字段“id”没有默认值(SQL:插入carsnbDorrs)值(3))

是否有解决方案或更好的数据库设计,以便我可以在两个表中插入数据并保持这种专业化?

【问题讨论】:

  • 车辆创建是否返回i​​d?
  • 是的,它确实工作正常并返回一个 id。
  • 那么你的 car create 方法不会给 id 字段赋值。
  • Create 是一个静态方法,属于 Laravel 继承的 eloquent 模型。假设它是一个自动递增的主键,它可能会跳过任何名为“id”的字段。

标签: php mysql laravel-5.3


【解决方案1】:

找到解决方案: 我只是省略了将 id 添加到 Car 模型中的可填充列!

class Car extends Model
{
  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = ['id', 'nbDoors'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多