首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉威尔多到多-3型号

拉威尔多到多-3型号
EN

Stack Overflow用户
提问于 2013-03-23 18:16:53
回答 3查看 448关注 0票数 1

在Laravel,有些人帮助了很多人建立了很多关系:

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

  • 所有角色的表
  • 供用户使用的表格
  • 以及使用user_id和role_id的表。

我想加到第三张表上(如年份)。基本上,支点表将包含user_id、role_id和year_id。

我希望能够进行一个查询,例如,在特定的一年中,所有用户都指定了一个特定的角色。role_id = 2和year_id = 1的所有用户。

如有任何帮助,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-25 12:28:44

在回答之前,我建议你不要把这样的一年放在数据库上。所有的表都应该有created_atupdated_at,这就足够了。

来过滤你想要的用户。你可以这样做:

代码语言:javascript
复制
// This queries all users that were assigned to 'admin' role within 2013.
User::join('role_users', 'role_users.user_id', '=', 'users.id')
    ->join('roles', 'roles.id', '=', 'role_users.role_id')
    ->where('roles.name', '=', 'admin')
    ->where(DB::raw('YEAR(role_users.created_at)', '=', '2013')
    ->get();

这个例子可能不是您想要的确切的查询,但应该足够您想出它。

票数 1
EN

Stack Overflow用户

发布于 2013-07-25 06:23:53

以雄辩的方式实现三向关系的最好方法是为表创建一个表示这种关系的模型。枢轴表用于双向关系。

然后,您可以有一个名为roles_users_year的表,它可以包含与这个3路关系相关的数据,比如时间戳或其他任何东西。

票数 0
EN

Stack Overflow用户

发布于 2020-02-13 02:51:41

对于一个非常老的问题,一个非常晚的答案,但Laravel支持附加的中间(枢轴)表列,至少从文档的角度来看,Laravel5.1表列没有变化,至少通过Laravel6.x没有改变。

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

代码语言:javascript
复制
return $this->belongsToMany(Role::class)->withPivot('column1', 'column2');

或者在你的例子中,下面的人也会做这个工作:

代码语言:javascript
复制
return $this->belongsToMany(Role::class)->withTimestamps();

然后,您可以通过模型上的pivot属性访问该属性:

代码语言:javascript
复制
$user = User::find(1);

foreach ($user->roles as $role) {
    echo $role->pivot->created_at;
}

请注意,透视属性位于远程关系模型(单个Role)上,而不是关系本身上。

为了在任何给定的年份中将所有的Role分配给User,您可以创建一个特殊的关系:

代码语言:javascript
复制
// User.php

public function rolesInYear($year) {
    return $this->belongsToMany(Role::class)
        ->wherePivot('created_at', '>=', Carbon::create($year))
        ->wherePivot('created_at', '<', Carbon::create($year + 1));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15590397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档