【问题标题】:SQLSTATE[HY000]: General error: 1364 Field 'reservation_id' doesn't have a default valueSQLSTATE [HY000]:一般错误:1364 字段“reservation_id”没有默认值
【发布时间】:2019-12-13 13:29:54
【问题描述】:

我的代码打不通。我有错误表明“reservation_id”没有默认值。 表 reservation_participate_details 的此 reservation_id 是父表 reservation 的 id 列的外键。我想知道是否与 hasManybelongsTo 事物有关。我对 laravel 还不是很熟悉。

reservation 表应该/在 reservation_participate_details 中有很多行。该过程之前正在运行,但是当我将 reservation_participate_details 的列 (reservation_participate_id) 更改为 reservation_id 并将其指向 reservationid 的外键时strong>,它现在不工作了。

我已经试过了

    public function participateDetail()
    {
        return $this->hasMany('App\ReservationParticipateDetail');
    }

进入reservation(父)表和

    public function reservation()
    {
        return $this->belongsTo('\App\Reservation');
    }

进入reservation_participate_detail

我只需要将参与详细信息保存到 reservation_participate_details。同样,reservation 表有许多 reservation_participate_details

【问题讨论】:

  • 报错说当你在reservation_participate_details表中插入一行时,你没有设置reservation_id列的值。
  • @catcon 是的,我理解这个想法。我只想知道我在这里错过了什么。我是 laravel 的新手
  • @MDB 你能检查一下你的桌子吗? reservation_id 是主键。所以你在创建表时设置了 AUTO_INCREMENT ?
  • @MDB 尝试在相应的模型文件中添加reservation_id(如果不存在)。

标签: php mysql laravel laravel-5.8


【解决方案1】:

由于你已经更改了外键列的名称(不遵循 laravel 默认约定),你需要在关系函数中定义这些列名。

预留模式

public function participateDetail()
{
    return $this->hasMany('App\ReservationParticipateDetail', 'reservation_id', 'id');
}

预订参与详情模型

public function reservation()
{
    return $this->belongsTo('\App\Reservation', 'reservation_id', 'id');
}

【讨论】:

  • 我使用迁移更改了列的外键。对不起,我没有提到它。
  • 如果您没有遵循 laravel 列的命名约定,则必须像我在答案中提到的那样定义它们。
  • 嗯。我想我确实遵循了 laravel 的列命名约定。我想我在这里遗漏了一些东西。我只是不知道是什么。
猜你喜欢
  • 2019-12-01
  • 2021-05-23
  • 2019-05-09
  • 2019-09-10
  • 2021-01-04
  • 2020-09-06
  • 2020-06-21
  • 2019-05-19
  • 2019-06-05
相关资源
最近更新 更多