我的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']);
}
?>
然而,上述似乎并不适用于多对多关系。我遇到this question,显然是指同一个问题,看起来这在Laravel 4.1中是不可能的。所选答案的作者 tptcat ,提供了一个关于Laravel的Github问题跟踪器上的问题的链接,但该链接不再有效,我无法确定此问题是否仍在4.2中打开。
有没有人遇到这个并成功设法解决它?
答案 0 :(得分:1)
{
return $this->belongsToMany('User')->select(array('id', 'name'));
}
使用此
答案 1 :(得分:0)
all
方法将列名称数组作为参数。
如果查看源代码,默认情况下需要*
(这意味着所有内容)。
https://github.com/laravel/framework/blob/4.2/src/Illuminate/Database/Eloquent/Model.php#L624-L629
您可以传入所需的列,并且只应使用指定的列返回结果。
<?php
$groups = Group::with('users')->all(array('first_column', 'third_column'));
答案 2 :(得分:0)
像这样使用。
<?php
class User extends Eloquent {
public function groups()
{
return $this->belongsToMany('Group')->select(array('id', 'name'));
}
}
class Group extends Eloquent {
public function users()
{
return $this->belongsToMany('User')->select(array('id', 'name'));
}
}
?>
答案 3 :(得分:0)
除了选择关系中的列外,还可以选择以下列:
$groups = Group::with('users:id,first_name,last_name')->all();
选择关系中的列时,请确保已选择关系表的外键