gpt4 book ai didi

php - 在 Laravel 中获取具有远距离关系的枢轴值

转载 作者:可可西里 更新时间:2023-10-31 23:45:58 25 4
gpt4 key购买 nike

在我的 Laravel 项目中,我使用了以下 ( inspired from here ) 来获得模型与另一个模型之间的远距离关系。我不能使用 HasManyThrough方法,因为 barsbazs 与多态关系相关。

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

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

这按预期工作并返回与 bars 相关的 bazsfoos 相关的 foos strong>MyClass 对象。我的问题是我不知道如何使用它来轻松获得诸如以下内容:

  • 每个baz 相关的特定foos
  • 每个baz 相关的foos 总数

注意:返回的foos列表必须是bazsbar<相关的foos/strong>通过

最佳答案

我将以一种方式回答这两个问题。

最简单的方法可能是使用预加载加载 foos - 但以相反的方式 - 在 $bazs 集合上:

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

并在 baz 的模型中定义例如访问器的方法:

public function getFoosAttribute()
{
$foos = \Illuminate\Database\Eloquent\Collection::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

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

$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() 简单列表的方法

关于php - 在 Laravel 中获取具有远距离关系的枢轴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com