【问题标题】:How to chain eloquent relations in laravel?如何在laravel中链接雄辩的关系?
【发布时间】:2016-10-15 09:25:25
【问题描述】:

到目前为止,我将关系对象提取为数组,然后执行以下操作:

App\Model::find($id)

但是有没有办法做类似的事情:

Auth::user()->group()->members()

它在Auth::user()->group 之前有效,但没有进一步的链接。如果你做了什么,请帮忙。或者我只是新手。

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    您可以使用预先加载来加载用户的组,然后加载该组的所有成员。

    $user = User::with(['group', 'group.members'])->find(1);
    
    // OR if you already have a user object (Like when using the Auth facade)
    $user = Auth::user()->load(['group', 'group.members']);
    
    foreach ($user->group->members as $member) {
        // Do something with a member
    }
    

    但是,如果您本质上想将结构向下跳到一个级别,并获取与用户相关的所有成员,您可以使用hasManyThrough 关系,因为一个用户通过一个组有很多成员。

    // In your User model
    public function members()
    {
        return $this->hasManyThrough(Member::class, Group::class);
    }
    

    这样您就可以直接通过用户访问成员:

    $members = Auth::user()->members;
    

    Laravel 不会使用查询来访问用户的组,然后再执行另一个查询来访问该组的成员,而是使用带有连接的单个查询来获取成员。

    看看hasManyThrough关系here

    【讨论】:

      【解决方案2】:

      试试这个

      Auth::user()->group->members
      

      【讨论】:

      • 我一定是在什么地方错过了它。谢谢你(:
      • 没关系@TheAkashRajput。 :)。上面的答案确实更具说明性。我们应该永远接受最好的。谢谢:)
      • 请注意,这是可行的,因为group()belongsTo 关系,当使用动态属性访问时,会返回Group 模型
      猜你喜欢
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2015-03-14
      • 2018-11-28
      • 2015-01-11
      • 2021-06-03
      相关资源
      最近更新 更多