【问题标题】:How to get Billing Address from Eloquent model with where clause?如何使用 where 子句从 Eloquent 模型中获取帐单地址?
【发布时间】:2020-02-25 12:21:31
【问题描述】:

例如我可以使用:

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

【问题讨论】:

  • $user-> billingAddress() 的输出是什么;
  • @invalidbot 查看更新

标签: php laravel


【解决方案1】:

一个选项是您可以在查询中使用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);

【讨论】:

  • 如何查询2? BillingAddress 1, ShippingAddress 2
  • 查询 2 表示 ?
  • 如果类型 = 1.. BillingAddress。如果 type = 2 送货地址。
猜你喜欢
  • 2013-02-28
  • 2017-04-17
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2013-06-03
  • 2012-11-11
  • 1970-01-01
  • 2022-10-08
相关资源
最近更新 更多