Laravel 带有字段限制的预加载

Laravel eager loading with field limit

我有三个表:

用户

role_user

角色

现在我想获取 users.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": []
        },

当我不将数组传递给 get 方法时,响应如下:

     {
            "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 和数据透视字段。如何过滤这些?

要获得关系,您需要获得外键。试试这个

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

至于枢轴table,你能post你在用户模型中的角色关系吗?

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

protected $hidden = ['pivot'];

您可以向该字段添加更多字段 属性 以将其从所有查询中删除。