【发布时间】:2014-09-28 20:28:09
【问题描述】:
我想创建一个这样的查询。
SELECT *
FROM user
INNER JOIN course ON user.course_id = course.id
AND (user.year_from IS NULL OR course.year_from > course.year_from)
AND (user.year_to IS NULL OR course.year_to < course.year_to)
我的第一个问题是我不知道如何翻译 IS NULL 部分。甚至可能吗?第二个问题是如何正确使用括号。我的第一个想法是做一些类似于高级 where 子句的事情。
$query->join('course', function($join) {
$join->on(function($join) {
$join->onNull('user.year_from')->orOn('user.year_from', '>', 'course.year_from');
};
$join->on(function($join) {
$join->onNull('user.year_to')->orOn('user.year_to', '<', 'course.year_to');
};
});
但是JoinClouse 类没有 onNull 方法,也不支持将闭包作为参数传递。还有其他建议吗?
【问题讨论】:
-
你在laravel.com/api/4.2/Illuminate/Database/Query/JoinClause.html这里签到了吗?我不知道 lavarel,但是看着这个页面,在我看来它有你的答案。里面有一个 whereNull (laravel.com/api/4.2/Illuminate/Database/Query/…)。
-
我现在试了一下,它给了我一个
Call to undefined method Illuminate\Database\Query\JoinClause::whereNull()。我们使用的是 4.1,也许它是在 4.2 中添加的? -
无论如何,谢谢,升级的激励措施......不过,另一个主要问题仍然存在。
-
对。作为替代方案,您可以只重新编写 SQL。您可以对匹配的 id 进行内部连接,并将其余条件放在 where 子句中。不过,我不确定这会对您的申请产生多大影响。
标签: php mysql sql laravel laravel-4