加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 在Laravel中获得具有远关系的透视值

发布时间:2020-12-14 19:37:21 所属栏目:大数据 来源:网络整理
导读:在我的Laravel项目中,我使用了以下( inspired from here)来获得从模型到另一个模型的远程关系.我不能使用 HasManyThrough方法,因为条和bazs与多态关系有关. public class MyClass { public function foos() { return $this-hasMany('AppFoo'); } public fun
在我的Laravel项目中,我使用了以下( inspired from here)来获得从模型到另一个模型的远程关系.我不能使用 HasManyThrough方法,因为条和bazs与多态关系有关.

public class MyClass 
{
    public function foos()
    {
        return $this->hasMany('AppFoo');
    }

    public function getBazAttribute()
    {
        $this->load(['foos.bars.bazs' => function ($q) use (&$bazs) {
            $bazs = $q->get()->unique();
        }]);
    }
}

这按预期工作,并返回与与MyClass对象相关的foos相关的条形相关的baz.我的问题是,我不知道如何使用它来轻松获取以下内容:

>每个巴兹所涉及的具体泡沫
>每个巴兹所涉及的foos总数

注意:返回的foos列表必须是baz与bar相关的foos

解决方法

我会以一种方式回答这两个问题.

最简单的方法可能是加载渴望加载 – 但是以对立方式 – 加载$bazs集合:

$bazs->load('bars.foos');

并在baz的模型中定义了例如Accessor的方法:

public function getFoosAttribute()
{
    $foos = IlluminateDatabaseEloquentCollection::make([]);
    foreach ($this->bars as $bar) {
        $foos->merge($bar->foos);
    }
    return $foos;
}

现在,当你将它们全部加载时你可以在那时进行迭代并使用某些foos集合的结果:

foreach ($bazs as $baz) {
    // get all baz's foos way
    $foosOfBaz = $baz->foos;

    //when we have them all in collection we can easily count them
    $foosOfBaz->count() 
}

The list of foos returned must be the foos that the bazs are related
to the bar through

如果你想通过特定的栏获得与baz相关的foos你只能通过嵌套的for / foreach循环访问,因为关系级别(bazs和它的条形图)都在集合中:

$bazs->load('bars.foos');

foreach ($bazs as $baz) {
    foreach ($baz->bars as $bar) {
        //here You can access the foos collection 
        //that is from bar's that belongs to baz model's object
        $bar->foos;
    }
}

注意:如果玩具想要获得一个阵列你必须使用:$bar-> foos-> toArray()或使用 – > pluck(‘filed_name’,’key_name’) – > toArray()方法一个简单的清单

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读