php – 在Laravel中获得具有远关系的透视值
在我的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列表必须是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() }
如果你想通过特定的栏获得与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()方法一个简单的清单 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |