Php Laravel-选择多对多关系上的特定列

Php Laravel-选择多对多关系上的特定列,php,laravel,relationship,Php,Laravel,Relationship,我的Laravel 4.2 web应用程序中有两个模型,User和Group。一个用户可以是多个组的成员,一个组可以有多个成员。因此,这两种模型通过多对多关系连接在一起: <?php class User extends Eloquent { public function groups() { return $this->belongsToMany('Group'); } } clas

我的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');
        }
    }
?>
但是,在JSON响应中,每个用户都包含
users
表中的所有字段(当然不包括
$hidden
属性中的字段)。我希望这个关系只返回一组特定的字段,而不是整个表

在其他关系类型中,我可以通过以下语句轻松实现这一点(现在假设用户可能只属于一个组):


然而,上述情况似乎不适用于多对多关系。我发现它显然是指同一个问题,看起来这在Laravel4.1中是不可能的。所选答案的作者,tptcat,提供了一个链接,指向Laravel的Github问题跟踪程序上的一个问题,但该链接已不起作用,我无法确定该问题是否在4.2中仍然存在


有人遇到过这个问题并成功地解决了它吗?

方法将列名数组作为参数

如果查看源代码,默认情况下需要
*
(表示所有内容)

您可以传入所需的列,它应该只返回指定列的结果

<?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();
在选择关系中的列时,请确保已选择关系表的外键


使用此功能

是的,此功能确实有效。但是,如果我在整个控制器的不同操作中进行类似的查询,我必须将相同的数组传递给所有查询。我的目标是找到一种类似于处理其他类型关系的解决方案。您可以始终创建一个函数,在模型中执行这些常见查询,并从控制器中的不同操作调用它。
<?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();
{
   return $this->belongsToMany('User')->select(array('id', 'name'));
}