Laravel 5:加入在与查询

问题描述:

我试着这样做:Laravel 5:加入在与查询

$results = $query->leftJoin('checklist_items', function($join) use ($days) { 
    $join->on('users.id', '=', 'checklist_items.user_id') 
     ->on('checklist_items.due_date', 'IN', $days); 
}) 
    ->where('checklist_items.user_id', null) 
    ->limit(10) 
    ->get(); 

这是我试图执行查询的一个例子:原来这

SELECT * 
FROM users 
LEFT JOIN checklist_items 
ON users.id = checklist_items.user_id 
AND checklist_items.due_date IN ('2015-07-09', '2015-07-10') 
WHERE checklist_items.user_id IS NULL 
ORDER BY users.id 

是一个左外连接。在查询生成器中,大部分这是没有问题的。问题在于我的AND行使用IN查询。如果它是WHERE子句的一部分,我会使用 - > whereIn,但因为我在Join子句中需要它,whereIn将不起作用,并且没有orIn或某些这样的。

对此提出建议?

我认为你需要使用DB::raw(),所以它不会试图引用你的日子,并用圆括号包装你的日子。这应该做的伎俩。

$days = '(\'2015-07-09\', \'2015-07-10\')'; 
$results = DB::table('users')->leftJoin('checklist_items', function($join) use ($days) { 
    $join->on('users.id', '=', 'checklist_items.user_id') 
     ->on('checklist_items.due_date', 'IN', DB::raw($days)); 
}) 
->where('checklist_items.user_id', null) 
->limit(10) 
->toSql(); 

echo $results; 
+0

差不多。这工作:' - > on('checklist_items.due_date','IN',DB :: raw('(''。。implode('\','',$ days)。'\')')) ;' –

此查询将工作

$results = DB::table('users') 
    ->join('checklist_items','checklist_items.user_id','=','users.id') 
    ->whereIn('checklist_items.due_date',['2015-07-09', '2015-07-10']) 
    ->whereNull('checklist_items.user_id') 
    ->orderBy('users.id','asc') 
+0

这种方法不起作用,因为我没有做一个where子句。我需要添加到连接子句中,而不是启动新的where子句。 –