在 Laravel 4 中使用预先加载时,我们可以使用以下方式加载关系:
$user = User::with('role')->find(1);
这将返回用户的表示,我们可以通过访问角色的表示
$user->roles();
现在我们还可以使用 where 过滤急切加载
$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->find(1);
这将返回仅在角色名称字段包含的位置填充角色的用户表示key
。
select()
我们可以通过添加约束来限制用户表示返回的字段。
$user = User::with(array('role' => function($query) {
$query->where('name', 'like', '%key%');
}))->select('email')->find(1);
这将只返回用户表示上的email
andid
字段,但返回角色表示上的所有字段。
我希望我可以限制关系上返回的字段(用于 api),但我似乎找不到方法;我尝试了以下两种方法。
$user = User::with(array('role' => function($query) {
$query->select('name');
}))->find(1);
和
$user = User::with('role')->select('role.name')->find(1);