所以belongToMany关系是一个多对多关系,所以需要一个透视表

例如,我们有一个users表、一个roles表和一个user_roles透视表.

数据透视表有两列,分别是user_idfoo_id...foo_id指的是角色表中的id.

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

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

现在,它在users表中查找id字段,并将其与user_roles表中的user_id字段联接.

问题是我想指定一个不同的字段,而不是users表中要连接的id.例如,我在users表中有bar_id,我想用它作为local keyuser_id连接

从拉维尔的文件来看,不清楚如何做到这一点.在其他关系中,比如hasManybelongsTo,我们可以指定local keyforiegn key,但出于某种原因,这里不能指定.

我希望用户表上的local keybar_id,而不是id.

我该怎么做?

推荐答案

更新:

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

作为参考,之前的方法:

我假设idUser模型的主键,所以用Eloquent 的方法无法做到这一点,因为belongsToMany使用$model->getKey()来获取该键.

因此,您需要创建自定义关系来满足您的需求.

您可以try 的快速猜测:(未经测试,但肯定无法与Eager 加载一起工作)

// 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;
}

Laravel相关问答推荐

我是否需要/是否可以从控制器运行LARLAVEL备份?

Livewire 3分页在点击后不更新页面

在 React 中将属性从一个组件传递到另一个组件

单个对象的Eloquent 计数是错误的

Laravel Debugbar 中的 Laravel api routes路由

Laravel & Docker:无法打开流或文件/var/www/html/storage/logs/laravel.log:无法打开流:权限被拒绝

Laravel 有Many Many to Many To One Eloquent

Laravel 合集日期比较

为什么我的 Laravel 队列作业(job)在 60 秒后失败?

Eloquent 的 Model::query() 是什么意思?

如何在 Laravel 查询中使用多个 OR、AND 条件

Laravel 5.1-5.8 中以前的路由名称

使用 Laravel 创建新项目会引发异常

安装后在 Lumen 中找不到页面

Laravel 验证 pdf mime

Select,where JSON 包含数组

Laravel 检测手机/平板电脑并加载正确的视图

如何使用 Postman 处理 Laravel $_POST 请求

搜索结果分页 laravel 5.3

Laravel 将附加参数传递给函数