在我的项目中,我建立了多种关系,如:
模型
public function foo()
{
return $this->hasMany(Bar::class);
}
public function fooSold()
{
return $this->hasMany(Bar::class)->where('sold', 1);
}
控制器
public function show()
{
$bar = Bar::with('foo')->first();
return new BarResource($bar);
}
public function showSold()
{
$bar = Bar::with('fooSold')->first();
return new BarResource($bar);
}
资源
public function toArray($request)
return [
...
'foo' => Foo::collection($this->whenLoaded('foo')),
]
在我的控制器中返回第一个函数没有任何问题。但是我如何在我的资源中以“foo”的同名返回第二个?
'foo' => Foo::collection($this->whenLoaded'fooSold')),
'foo' => Foo::collection($this->whenLoaded'foo')),
这可行,但似乎不是正确的方法,因为你有两次相同的数组键。
这样做的最佳方式是什么?
答案 0 :(得分:1)
对第二种情况使用local query scope:
public function scopeSold($query)
{
return $query->whereHas('foo', function ($q) {
$q->where('sold', 1);
});
}
// call the scope
$sold = Foo::sold();
答案 1 :(得分:0)
数组的重点是拥有唯一键。如果要存储值对,请创建一个数组数组,如:
$array[] = [$value1, $value2];
在您的情况下,例如:
'foo' => [Foo::collection($this->whenLoaded'fooSold')), Foo::collection($this->whenLoaded'foo'))]
答案 2 :(得分:0)
尝试一下:
'foo' => Foo::collection($this->whenLoaded('foo') instanceof MissingValue ? $this->whenLoaded('fooSold') : $this->whenLoaded('foo')),