gpt4 book ai didi

mysql - Laravel 5.8 多对多关系使用数据透视表的自定义列名称

转载 作者:行者123 更新时间:2023-11-29 16:02:35 25 4
gpt4 key购买 nike

我有两个表user_detailslocation,如下所示:

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');
}
}

现在,在我的 Controller 中,我通过以下代码保存 UserDetailsLocation 对象后创建关系:

$userDetails->location()->attach($location->id, ['type'=>'HEADQUARTER']);

当代码到达此执行行时,出现以下异常:

SQLSTATE[HY000]: General error: 1364 Field 'location_id' doesn't have a default value (SQL: insert into location_user_details (id, type, user_id) values (1, HEADQUARTER, 0))

我想指出正在发生的两件事。

  1. 位置字段未进入查询以插入数据。
  2. user_id 值为 0,当数据插入到 user_details 时,该值应大于 0 > 表。

这里我提一下,当我去数据库查找locationuser_details表中的数据时,我发现所有数据都已插入。

现在我的问题是这段代码可能出了什么问题?

最佳答案

好吧,我终于发现出了问题。关于这个主题的文档并不多。实际上,这与函数belongsToMany的使用有关。 belongsToMany函数最多接受 7 个参数。到目前为止我可以解码前 4 个参数。

第一个参数采用相关模型的类。

第二个参数采用数据库中数据透视表的名称。

第三个参数采用数据透视表中的列名称,该数据透视表引用调用 belongsToMany 的模型。

第四个参数采用数据透视表中引用相关模型的列的名称。

因此,模型 UserDetails 中函数 location 的代码如下所示:

public function location(){
return $this->belongsToMany(Location::class, 'location_user_details', 'user_id', 'location_id')->withPivot('type');
}

模型 Location 中函数 userDetails 的代码如下所示:

public function userDetails(){
return $this->belongsToMany(UserDetails::class, 'location_user_details', 'location_id', 'user_id')->withPivot('type');
}

我希望这对其他人有帮助。

关于mysql - Laravel 5.8 多对多关系使用数据透视表的自定义列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56054531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com