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()方法一个简单的清单 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
