首页 > 解决方案 > 调用关系后访问目标表的列 - Laravel

问题描述

我有三个表如下

基表

users
    id - integer
    name - string

目标表

roles
    id - integer
    name - string

数据透视表

role_user
    user_id - integer
    role_id - integer

usersroles表之间存在多对多关系

如果我想要所有角色 ID 为“1”的用户,那么我可以简单地这样做

$result = User::whereHas('roles', function ($q){
   $q->where('roles.id', 1);
});

但我也希望角色名称对应于 table 的name列role_id '1' roles

有什么办法可以将角色名称附加到$result集合中。

标签: laraveleloquent

解决方案


您可以Eagerload关系以获取所需的列:

User::whereHas('roles', function ($q){
            $q->where('roles.id', 1);
        })->with(['roles' => function ($q){
        $q->select('name')->where('roles.id', 1);
          }])->get();

推荐阅读