caf*_*nso 9 php relationship laravel
我在Laravel 4.2 Web应用程序中有两个模型,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');
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我的一个API资源是/groups,列出了应用中可用的所有群组:
<?php
$groups = Group::with('users')->all();
?>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但是在JSON响应中,每个用户都包含users表中的所有字段(当然不包括$hidden属性中的那些字段).我希望这种关系只返回一组特定的字段而不是整个表.
在其他关系类型中,我可以使用以下语句轻松实现此功能(现在假设用户可能只属于一个组):
<?php
public function users()
{
return $this->hasMany('User')->select(['id', 'first_name', 'last_name']);
}
?>
Run Code Online (Sandbox Code Playgroud)
然而,上述似乎并不适用于多对多关系.我遇到了这个问题,显然是指同一个问题,看起来这在Laravel 4.1中是不可能的.所选答案的作者tptcat提供了一个关于Laravel的Github问题跟踪器上的问题的链接,但该链接不再有效,我无法确定此问题是否仍在4.2中打开.
有没有人遇到这个并成功设法解决它?
小智 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'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |