【发布时间】:2020-12-22 00:00:45
【问题描述】:
我正在尝试创建一个函数来帮助我快速获取所需的数据。
通过所有的试验,我已经能够达到以下目标
表格:
用户(ID、姓名)
项目(ID、名称)
User-Project (id, user_id, project_id, manager) 其中 manager 是一个布尔值,每个项目只能有一个经理(但员工仍然可以看到我们有数据透视表的项目原因,manager = 0 表示其他可以访问该项目的普通用户)
在我的项目模型中:
public function Manager(){
return $this->belongsToMany('App\User')->wherePivot('manager', true);
}
在我的视图中:
<p><strong>Project Manager:</strong> {{$project->manager}}</p>
在我得到的实际页面上:
Project Manager: [{"id":4,"name":"Daniel Doe","email":"danieldoe@hotmail.com","phone":"70846556","email_verified_at":null,"created_at":"2020-12-20 21:05:50","updated_at":"2020-12-20 21:05:50","pivot":{"project_id":1,"user_id":4,"manager":1}}]
当我将视图更改为:
<p><strong>Project Manager:</strong> {{$project->manager[0]->name}}</p>
我明白了:
Project Manager: Daniel Doe
这是我真正想要的,但如果可能的话,我想从模型中做到这一点。所以我尝试了:
public function Manager(){
return $this->belongsToMany('App\User')->wherePivot('manager', true)->first()->name;
}
但我收到以下错误:
must return a relationship instance
这可以从模型的函数中完成吗?
【问题讨论】:
-
belongsToMany()返回一个集合,即多条记录。您的函数名称应为managers以反映这一点。接下来,如果你的要求是“每个项目只能有一个经理”,为什么要使用返回多个Manager的函数和数据库结构?应该是@ 987654330@,你的projects表应该有一个manager_id,而不是它们之间的数据透视表......你的要求和编码不匹配。您仍然可以使用枢轴将users链接到projects,但删除manager列。 -
因为项目可以有多个用户但只有一个经理,所以我编辑了问题,谢谢指出。
-
是的,看我编辑的评论;您仍然可以拥有该关系的
project_user数据透视表,但它应该与manager分开(无论如何我认为)。我可以看到两种方式的争论,但它有点偏离。我将发布如何使用您当前的结构的答案; 1 秒。
标签: laravel