【发布时间】:2015-02-26 18:24:35
【问题描述】:
我有以下查询,但没有给我预期的结果:
$query = $query->join('events_dates', function($join) use ($data){
$join->on('events.id', '=', 'events_dates.event_id')
->where('events_dates.start_date', "<=", date_format(date_create($data['date_end']), "Y-m-d"))
->where('events_dates.end_date', '>=', date_format(date_create($data['date_start']), "Y-m-d"))
->orWhere('recurrent', "=", 1)
->where((strtotime($data["date_start"]) - strtotime('event_dates.start_date')) % ('events_dates.repeat_interval' * 86400), '=', 0);
});
此查询中有 4 个 where 子句。
要求是要么执行前两个 where 子句,要么执行最后两个,具体取决于 recurrentfield。
PHP 返回错误division by zero,因为当recurrent 是0 时不应执行最后一个Where 子句。
有什么建议吗?
【问题讨论】:
-
您不能在 where 子句中的 SQL 列上使用像
strtotime这样的 PHP 函数。可以用 SQL 写吗? -
可能,必须调查一下。 Laravel 似乎接受它,但我得到一个除以零的错误。不先评估吗?
-
嗯,刚刚意识到这种方法根本行不通。
where期望第一个参数是数据库中的字段名称,所以我还没有找到另一种解决方法。最终我可以将所有经常发生的事件隔离到一个单独的表中,但我觉得这有点傻。
标签: php mysql laravel laravel-4 orm