【发布时间】:2019-09-27 00:01:56
【问题描述】:
我有两张表 user_details 和 location 如下:
user_details
user_id (INTEGER PRIMARY KEY)
......
location
id (INTEGER UNSIGNED PRIMARY KEY)
......
这两个表以多对可能的关系相互关联。现在我正在使用如下所示的数据透视表location_user_details
location_user_details
id (INTEGER UNSIGNED PRIMARY KEY),
user_id (INTEGER FOREIGN KEY REFERENCES use_details.user_id)
location_id (INTEGER FOREIGN KEY REFERENCES location.id)
type (VARCHAR)
模型UserDetails的关系代码如下:
class UserDetails extends Model
{
protected $primaryKey = 'user_id';
........
public function location(){
return $this->belongsToMany(Location::class, 'location_user_details', 'user_id', 'id')->withPivot('type');
}
}
模型Location的关系代码如下:
class Location extends Model
{
......
public function userDetails(){
return $this->belongsToMany(UserDetails::class, 'location_user_details', 'id', 'user_id')->withPivot('type');
}
}
现在在我的控制器中,我在通过以下代码保存 UserDetails 和 Location 对象后创建关系:
$userDetails->location()->attach($location->id, ['type'=>'HEADQUARTER']);
当代码到达这行执行时,我得到以下异常:
SQLSTATE[HY000]:一般错误:1364 字段“location_id”没有默认值(SQL:插入
location_user_details(id,type,user_id)值(1,HEADQUARTER, 0))
我想指出正在发生的两件事。
- 位置字段未进入查询以插入数据。
-
user_id的值是0,它应该大于0,因为数据正在插入到user_details表中。
现在在这里提一下,当我去数据库查找location和user_details表中的数据时,发现所有数据都已插入。
现在我的问题是这段代码可能出了什么问题?
【问题讨论】:
标签: mysql laravel many-to-many pivot-table laravel-5.8