Laravel - 在多对多关系中选择特定列

12

我的 Laravel 4.2 网络应用程序中有两个模型:UserGroup。用户可以是许多组的成员,而一个组也可以有许多成员。因此,这两个模型使用了多对多关系进行连接:

<?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版本中。

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

4个回答

3
{
   return $this->belongsToMany('User')->select(array('id', 'name'));
}

使用此功能


0

是的,这个方法可以工作。但是,如果我在控制器的不同操作中进行类似的查询,我必须将相同的数组传递给它们所有的操作。我希望能够找到一种类似于其他类型关系的解决方案。 - cafonso
你可以在你的模型中创建一个函数来执行这些常见的查询,并从你的控制器中的不同操作中调用它。 - user3774430

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'));
        }
    }
?>

0

不必在关系中选择列,您可以按如下方式选择列:

$groups = Group::with('users:id,first_name,last_name')->all();

当您在关系中选择列时,请确保已选择关联表的外键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接