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;
答
此查询将工作
$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子句。 –
差不多。这工作:' - > on('checklist_items.due_date','IN',DB :: raw('(''。。implode('\','',$ days)。'\')')) ;' –