繁体   English   中英

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

[英]Laravel - Selecting specific columns on many-to-many relationships

我的 Laravel 4.2 Web 应用程序中有两个模型, 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']);
    }
?>

然而,以上似乎不适用于多对多关系。 我遇到了这个问题,它显然指的是同一个问题,看起来这在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM