返回 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);
我有一个模型用户定义如下:
<?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);