如何在laravel模型中定义多对多的关系?

时间:2016-08-04 08:01:34

标签: php laravel laravel-5.2

我有两张主表。即userstasks。用户表的主键列名称为in_user_id,任务表为in_task_id

存在关系表users_tasks(用于查看为哪些用户和用户分配了哪些任务的任务)。 users_tasks表中的外键列为in_task_idin_worker_id

我想在两个模型中定义用户和任务(多对多)的关系。我看过这个doc。但就我而言,主键列是users表中的 in_user_id 。但是外键列名是users_tasks表中的 in_worker_id

所以我不知道如何处理关系函数中的第四个参数(任务模型文件中的return $this->belongsToMany('App\User', 'users_tasks', 'in_task_id', ?); )。 in_user_idin_worker_id或其他内容需要定义更多内容。如果有人知道解决方案,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

试试这个

  

$ this-> belongsToMany(' App \ User,' users_tasks',' in_worker_id',   ' in_user_id');

params - >模型,关系表,外键,主键

关系表也应按字母顺序排列。 (最好的办法) 必须是 tasks_users

答案 1 :(得分:1)

来自laravel eloquent documentation on many-to-many relationships

  

除了自定义连接表的名称之外,您还可以通过将其他参数传递给belongsToMany方法来自定义表上键的列名。第三个参数是您定义关系的模型的外键名称,而第四个参数是您要加入的模型的外键名称:

在你的情况下,它将是:

return $this->belongsToMany('App\User', 'users_tasks', 'in_task_id', 'in_worker_id');

现在假设一些事情:

  1. 您的用户和任务模型工作正常(因为您已经在模型中定义了非常规标识符)。
  2. 不确定是否仍然如此,但在早期版本的Laravel中,您的数据透视表(在本例中为users_tasks)也需要它自己的标识符列,通常是自动增加的ID。