返回 Laravel 模型时,如何在使用 with() 的同时限制列?

When returning a Laravel model, how do I restrict columns while also using with()?

我有一个模型用户定义如下:

<?php
class User extends Eloquent {

public function roles() {
  return $this->belongsToMany('Role');
}

我如何编写一个只从 User 中获取特定字段以及每个 Role 中的所有字段的查询?¨ 我不想使用 hidden 属性在 User 模型上,因为在不同的情况下我需要不同的字段子集。

这有效,但当然 returns 来自 User 的所有字段:

$user = User::with('roles')->findOrFail($id);

这正确地限制了 User 的字段,但是 returns 对于 roles 没有任何限制 - 只是一个空数组

$user = User::with('roles')->select(['name','email'])->findOrFail($id);

任何在 select 中引用 roles 字段的尝试都会出错。

试试这个代码:

$with = array('roles' => array('id', 'name'));
$user = User::with($with);

看看是否有帮助。

在预加载中你必须这样做。

$user = User::with(array('roles' => function($q)
    {
        $q->select('field1');

    }))->select(['name','email'])->findOrFail($id);