例如,我可以使用:
$address = $user->address
将返回用户的地址。
// User.php(模型)
public function address()
{
return $this->hasMany(Address::class, 'refer_id', 'id');
}
public function billingAddress()
{
return $this->address()
->where('type', '=', 1)
->where('refer_id', '=', $this->id)
->first();
}
但是,我希望根据此where子句为用户返回BillingAddress。我该怎么办?
编辑:如果我在内部使用... OrderController @ index,它将正确返回
$orders = Order::with('order_fulfillment', 'cart.product', 'user.address', 'payment')->get();
return new OrderResource($orders);
但是,如果我将其更改为:
$orders = Order::with('order_fulfillment', 'cart.product', 'user.billingAddress', 'payment')->get();
return new OrderResource($orders);
我收到此错误:Symfony \ Component \ Debug \ Exception \ FatalThrowableError在null
上调用成员函数addEagerConstraints()一个选项是您可以在查询中使用whereHas
。例如,
$orders = Order::with('order_fulfillment', 'cart.product', 'user.address', 'payment')
->whereHas(
'address', function ($query) {
$query->where('type', '=', 1)
->first();
}
)->get();
return new OrderResource($orders);
这是一个选项。尝试dd($orders)
查找其是否有效。
您在模型中还有另一个这样的选择
public function address()
{
return $this->hasMany(Address::class, 'refer_id', 'id');
}
添加喜欢的关系
public function billingAddress()
{
return $this->hasOne(Address::class, 'refer_id', 'id')->where('type', 1);
}
和
public function shippingAddress()
{
return $this->hasOne(Address::class, 'refer_id', 'id')->where('type', 2);
}
然后查询,
$orders = Order::with('order_fulfillment', 'cart.product', 'user.address','user.billingAddress', 'user.shippingAddress', 'payment')->get(); return new OrderResource($orders);