我有以下结构
打开
id
OrderPayment
ID
turn_id
invoice_id
OrderInvoice
ID
order_id
顺序
ID
取消
合并
我想要做的是获取OrderPayments
其中Order
未取消既未合并
现在我依次拥有以下代码
class Turn{
public function orderPayments(){
return $this->hasMany('OrderPayment');
}
}
如何仅使用
获取与Order
相关的付款
->where('canceled' < '0000-00-00 00:00:10 ')
->where('merged' < '0000-00-00 00:00:10 ')
非常感谢!!
编辑使用我实际拥有的关系进行更新
在OrderPayment
我有功能
public function invoice(){
return $this->belongsTo('Invoice');
}
在OrderInvoice
我有功能
public function order(){
return $this->belongsTo('Order');
}
这是我尝试Turn
的代码如下
public function orderPayments(){ return OrderPayment::whereHas('invoice',function($query){ $query->whereHas('order',function($query){ $query->where('canceled','<','0000-00-00 00:00:01') ->where('merged','<','0000-00-00 00:00:01'); }); })->where('turn_id','=',$this->id)->get(); }
我得到以下异常
Call to undefined method Illuminate\Database\Query\Builder::order()
答案 0 :(得分:1)
您需要whereHas
:
$payments = OrderPayment::whereHas('invoice', function ($q) {
$q->whereHas('order', function ($q) {
$q->where('canceled', '=', '0000-00-00')
->where('merged', '=', '0000-00-00');
});
})->get();
作为旁注,我会将这些列更改为nullable
并搜索whereNull('canceled')
等。