我的 Laravel 4.2 网络应用程序中有两个模型:User
和 Group
。用户可以是许多组的成员,而一个组也可以有许多成员。因此,这两个模型使用了多对多关系进行连接:
<?php
class User extends Eloquent {
public function groups()
{
return $this->belongsToMany('Group');
}
}
class Group extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
}
?>
我的一个API资源是/groups
,用于列出应用中所有可用的组:
<?php
$groups = Group::with('users')->all();
?>
这个方法可行,但是在JSON响应中,每个用户都包含了users
表中的所有字段(当然不包括$hidden
属性中的字段)。我希望这种关系只返回一组特定的字段而不是整张表。
在其他关系类型中,我可以轻松地通过以下语句实现此目的(现在假设用户只能属于一个组):
<?php
public function users()
{
return $this->hasMany('User')->select(['id', 'first_name', 'last_name']);
}
?>
然而,上述方法似乎不能很好地处理多对多(many-to-many)关系。我发现了这个问题,该问题似乎涉及同样的问题,并且在 Laravel 4.1 中可能无法解决。所选答案的作者tptcat提供了一个指向 Laravel Github 问题跟踪器上的问题的链接,但该链接已不再有效,我无法确定这个问题是否仍然存在于4.2版本中。
有没有人遇到过这个问题并成功地解决了?