Laravel有许多人在上层模特身上

时间:2014-09-23 20:31:14

标签: php mysql laravel eloquent

我有以下结构


打开
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()

1 个答案:

答案 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')等。