gpt4 book ai didi

php - Laravel belongsToMany 关系在两个表上定义本地键

转载 作者:可可西里 更新时间:2023-10-31 22:08:50 25 4
gpt4 key购买 nike

所以belongsToMany关系是多对多关系所以需要一个数据透视表

例如,我们有一个users 表和一个roles 表以及一个user_roles 数据透视表。

数据透视表有两列,user_id, foo_id ... foo_id 指的是 id角色表。

为此,我们在 user Eloquent 模型中编写以下内容:

return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');

现在这会在 users 表中查找一个 id 字段,并将它与 user_roles 中的 user_id 字段连接起来> 表格。

问题是我想指定一个不同的字段,而不是 id 以加入 users 表。例如,我在用户表中有 bar_id,我想将其用作 local key 以加入 user_id

从 laravel 的文档中,不清楚如何执行此操作。在 hasManybelongsTo 等其他关系中,我们可以指定 local keyforiegn key 但由于某种原因不在这里.

我希望 users 表上的 local keybar_id 而不仅仅是 id

我该怎么做?

最佳答案

更新:从 Laravel 5.5 开始,可以使用通用关系方法,如下面的@cyberfly 所述:

public function categories()
{
return $this->belongsToMany(
Category::class,
'service_categories',
'service_id',
'category_id',
'uuid', // new in 5.5
'uuid' // new in 5.5
);
}

供引用,以前的方法:

我假设 id 是你的 User 模型的主键,所以没有办法用 Eloquent 方法来做到这一点,因为 belongsToMany使用 $model->getKey() 获取该 key 。

因此您需要创建自定义关系扩展 belongsToMany 来满足您的需要。

快速猜测您可以尝试:(未测试,但肯定不会与预先加载一起使用)

// User model
protected function setPrimaryKey($key)
{
$this->primaryKey = $key;
}

public function roles()
{
$this->setPrimaryKey('desiredUserColumn');

$relation = $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');

$this->setPrimaryKey('id');

return $relation;
}

关于php - Laravel belongsToMany 关系在两个表上定义本地键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391759/

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