繁体   English   中英

如何使用 where 子句从 Eloquent 模型中获取账单地址?

[英]How to get Billing Address from Eloquent model with where clause?

例如我可以使用:

$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM