Laravel急切加载字段限制

时间:2015-05-08 01:46:24

标签: laravel-5 eager-loading

我有三张桌子:

用户

  • ID
  • 名称
  • ROLE_ID
  • 密码
  • ...

ROLE_USER

  • ID
  • ROLE_ID
  • USER_ID

角色

  • ID
  • 名称
  • 蛞蝓
  • ...

现在我想获得一个user.id,users.name的用户列表, roles.id。那是我的代码:

    $query = User::with(['roles'=>function($q){
        $q->lists('role_id');
    }])->get(['id','name']);

像那样的反应

       {
            "id": "1",
            "name": "aaaa",
            "roles": []
        },
        {
            "id": "2",
            "name": "bbbb",
            "roles": []
        },

当我没有通过数组获取方法时,响应如下:

     {
            "id": 1,
            "name": "aaaa",
            "password": "xxxxxxx",
            "created_at": "2015-05-07 14:15:00",
            "roles": [
                {
                    "role_id": 2,
                    "pivot": {
                        "user_id": 1,
                        "role_id": 2
                    }
                }
            ]
        },
        {
            "id": 2,
            "name": "bbbb",
            "password": "xxxxxxx",
            "created_at": "2015-05-05 14:15:00",
            "roles": [
                {
                    "role_id": 2,
                    "pivot": {
                        "user_id": 2,
                        "role_id": 2
                    }
                }
            ]
        },

但我不想要密码,created_at和pivot字段。如何过滤这些?

1 个答案:

答案 0 :(得分:0)

要获得获取外键所需的关系。试试这个

$query = User::with(['roles'=>function($q){
    $q->get(['id', 'name', 'slug']);
}])->get(['id','name', 'role_id']);

对于数据透视表,您可以在用户模型中发布角色关系吗?

编辑 将其添加到您的用户模型以隐藏透视属性

protected $hidden = ['pivot'];

您可以向该属性添加更多字段,以便从所有查询中删除它们。