2014-09-13 48 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');