Laravel 多对多自定义 'ID' 列

Laravel many to many with custom 'ID' column

我有 2 个 table 的用户和团队,它们建立了关系 table user_team。

user_team table 有 cod_user 和 cod_equipe 列,并引用用户列 cod 和团队 cod。

这个关系returns NULL

用户模型

public function user_team(){
    //belongs to -> pertence a
    return $this->belongsToMany('App\User','user_team','cod_user','cod_equipe');
}

团队模型

public function team_user(){
    //belongs to -> pertence a
    return $this->belongsToMany('App\Team','user_team','cod_equipe','cod_user');
}

我认为这是因为 Eloquent 尝试使用用户 ID 加入 cod_user,但引用在 cod 列上。

我该如何更改?

您能否阐明关于这些 table 的数据库架构是什么样的?为了在显式定义它们时使关系起作用,您需要指定相关模型的外键,然后是要加入的 table 的外键。我对这里使用 'cod' 作为用户和团队 table 中提到的外键感到困惑。来自用户 table 的外键引用是一个名为 'cod' 的字段吗?

如果是这样,您需要将其指定为用户模型的外键,并假设 'cod_user' 是 user_team 中的键,它在用户模型中看起来像这样:

 public function userTeam(){
        return $this->belongsToMany('App\User','user_team','cod','cod_user');
 }

来自 laravel 文档: Laravel 5.3 eloquent many-to-many relationships

In addition to customizing the name of the joining table, you may also customize the column names of the keys on the table by passing additional arguments to the belongsToMany method. The third argument is the foreign key name of the model on which you are defining the relationship, while the fourth argument is the foreign key name of the model that you are joining to:

return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');

此外,如果用户或团队 table 的主键未命名为 'id',则您必须通过在用户和团队模型中定义变量 $primaryKey 来覆盖约定.