[英]Laravel - Selecting specific columns on many-to-many relationships
我的 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');
}
}
?>
我的 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']);
}
?>
然而,以上似乎不适用于多对多关系。 我遇到了这个问题,它显然指的是同一个问题,看起来这在 Laravel 4.1 中是不可能的。 所选答案的作者tptcat在 Laravel 的 Github 问题跟踪器上提供了一个问题的链接,但该链接不再有效,我无法确定此问题在 4.2 中是否仍然存在。
有没有人遇到过这个问题并成功解决了它?
{
return $this->belongsToMany('User')->select(array('id', 'name'));
}
用这个
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'));
像这样使用。
<?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'));
}
}
?>
您可以选择如下列,而不是选择关系中的列:
$groups = Group::with('users:id,first_name,last_name')->all();
当您在关系中选择列时,请确保您选择了关系表的外键
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.