2014-09-13 49 views
1

我尝试做以下连接:雄辩先进内的先进其中加入

Schedules::select() 
    ->leftJoin('histories', function ($j) 
     { 
      $j->on('histories.schedule_id', '=', 'schedules.id') 
       ->where('histories.test', '=', DB::raw('schedules.test')) 
       ->where(function ($q) 
       { 
        $q->where('histories.order_id', '=', 'schedules.order_id') 
         ->orWhere('histories.customer_id', '=', DB::raw('schedules.customer_id')); 
       }); 
     }); 

当我这样做,Laravel报告错误:

Missing argument 2 for Illuminate\Database\Query\JoinClause::where() 

如何组织这个查询中雄辩的语法,以便我可以获得与联合语句相同的以下内容?

left join histories 
    on histories.schedule_id = schedules.id 
     and histories.test = schedules.test 
     and (
      histories.order_id = schedules.order_id 
      or histories.customer_id = schedules.customer_id 
     ) 

回答

2

不幸的是JoinClause小号where不起作用像普通where条款,你不能通过关闭嵌套何在,所以你只需要重复你的条件的一部分。

另外,您不需要whereDB::raw来获得更多的连接条款,而是再次使用on

所以基本上你需要这个:

$j->on('histories.schedule_id', '=', 'schedules.id') 
    ->on('histories.test', '=', 'schedules.test') 
    ->on('histories.order_id', '=', 'schedules.order_id') 

    ->orOn('histories.schedule_id', '=', 'schedules.id') 
    ->on('histories.test', '=', 'schedules.test') 
    ->on('histories.customer_id', '=', 'schedules.customer_id');