Laravel多对多-3模型

Laravel多对多-3模型,laravel,Laravel,在Laravel的多对多关系中有一些帮助: 使用角色和用户示例-基本上: 所有角色的表 供用户使用的表格 和具有用户id和角色id的表 我想在第三张表上加上一张(如一年)。基本上,透视表将具有用户id、角色id和年份id 我希望能够进行一个查询,例如在特定的年份中,所有分配了特定角色的用户。例如,角色id为2,年份id为1的所有用户 任何帮助都将不胜感激在回答之前,我建议您不要像这样在数据库中输入年份。 您的所有表都应该在处创建并在处更新,这就足够了 按需要筛选用户。您可以这样做: //这将

在Laravel的多对多关系中有一些帮助:

使用角色和用户示例-基本上:

  • 所有角色的表
  • 供用户使用的表格
  • 和具有用户id和角色id的表
我想在第三张表上加上一张(如一年)。基本上,透视表将具有用户id、角色id和年份id

我希望能够进行一个查询,例如在特定的年份中,所有分配了特定角色的用户。例如,角色id为2,年份id为1的所有用户


任何帮助都将不胜感激

在回答之前,我建议您不要像这样在数据库中输入年份。 您的所有表都应该在处创建
并在
处更新
,这就足够了

按需要筛选用户。您可以这样做:

//这将查询2013年内分配给“管理员”角色的所有用户。
User::join('role\u users','role\u users.User\u id','=','users.id'))
->join('roles','roles.id','=','role\u users.role\u id'))
->其中('roles.name'、'='、'admin')
->其中(DB::raw('YEAR(role_users.created_at)'、'2013')
->get();

这个示例可能不是您要查找的精确查询,但应该足以让您找到它。

在回答之前,我建议您不要像这样在数据库中输入年份。 您的所有表都应该在
处创建
并在
处更新
,这就足够了

要筛选所需的用户,请执行以下操作:

//这将查询2013年内分配给“管理员”角色的所有用户。
User::join('role\u users','role\u users.User\u id','=','users.id'))
->join('roles','roles.id','=','role\u users.role\u id'))
->其中('roles.name'、'='、'admin')
->其中(DB::raw('YEAR(role_users.created_at)'、'2013')
->get();

此示例可能不是您要查找的精确查询,但应该足以让您找到它。

使用Eloquent实现三方关系的最佳方法是为表示此关系的表创建模型。透视表用于双向关系


然后,您可以创建一个名为
角色\u用户\u年份
的表,该表可以包含与此三方关系相关的数据,如时间戳或其他…

使用Eloquent实现三方关系的最佳方法是为表示此关系的表创建一个模型。透视表用于双向关系


然后,您可以有一个名为
roles\u users\u year
的表,该表可以包含与此三方关系相关的数据,如时间戳或其他什么…

一个非常老的问题的非常晚的答案,但Laravel支持其他中间(pivot)表中至少有Laravel 5.1的列,从中可以看出,至少在Laravel 6.x中没有改变

定义多对多关系时,可以描述这些额外的列:

return$this->belongstomy(Role::class)->withPivot('column1','column2');
或者,在您的情况下,以下内容也可以完成此工作:

return$this->belongsToMany(Role::class)->withTimestamps();
然后,您可以通过模型上的
pivot
属性访问:

$user=user::find(1);
foreach($user->roles as$role){
echo$role->pivot->created\u at;
}
请注意,pivot属性位于远程关系模型(单个
角色
)上,而不是关系本身

要获得任何给定年份分配给
用户的所有
角色
s,您可以创建特殊关系:

//User.php
公共职能角色年度(年){
返回$this->belongstomy(角色::类)
->wherePivot('created_at','>=',Carbon::create($year))

->wherePivot('created_at','p>对一个非常老的问题的回答非常晚,但从中可以看出,Laravel支持至少Laravel 5.1的其他中间(pivot)表列,至少在Laravel 6.x中没有改变

定义多对多关系时,可以描述这些额外的列:

return$this->belongstomy(Role::class)->withPivot('column1','column2');
或者,在您的情况下,以下内容也可以完成此工作:

return$this->belongsToMany(Role::class)->withTimestamps();
然后,您可以通过模型上的
pivot
属性访问:

$user=user::find(1);
foreach($user->roles as$role){
echo$role->pivot->created\u at;
}
请注意,pivot属性位于远程关系模型(单个
角色
)上,而不是关系本身

要获得任何给定年份分配给
用户的所有
角色
s,您可以创建特殊关系:

//User.php
公共职能角色年度(年){
返回$this->belongstomy(角色::类)
->wherePivot('created_at','>=',Carbon::create($year))

->wherePivot(‘created_at’,‘为什么要使用第三个表作为年份id?为什么不能将年份id放入users表或带有user_id和role_id的表中?关系是什么?基本上,可以让一个用户在不同的年份分配不同的角色,这意味着在第1年,一个用户可以有角色a,而在第2年,他有角色b。所以我想看到所有用户都分配了ro例如,第一年中的le a为什么要使用第三个表作为年id?为什么不能将年id放在用户表或带有用户id和角色id的表中?关系是什么?基本上,可以让一个用户在不同的年份分配不同的角色,这意味着在第一年,用户可以有角色a,在第二年,他有角色b。所以我想看到所有用户a例如,在第1年分配角色a