如何用两列编写Laravel Eloquent whereBetween方法

时间:2018-07-22 10:11:44

标签: php mysql laravel-5

我正在尝试以雄辩的格式编写以下查询:

SELECT * FROM `table_name` where timestamp_col1 AND timestamp_col2 BETWEEN 
'2018-07-23 11:45:25' and '2018-07-23 14:45:25'

通过雄辩的默认方法,我能够以以下格式编写查询:

$this->getEntity()
     ->whereBetween('timestamp_col1', [$start, $end])
     ->orWhereBetween('timestamp_col2', [$start, $end])
     ->get();

但是以上述格式编写的缺点是我必须手动指定 两列分别开始和结束时间戳记。还有其他方法可以实现吗?还是必须使用whereRaw()方法?谢谢。

2 个答案:

答案 0 :(得分:0)

您不需要手动指定$start$end时间戳。您只需要使用Php日期函数将$start$end的值转换为时间戳或正确的datetime格式,如下所述:

$start = date('Y-m-d H:i:s', strtotime($start));
$end = date('Y-m-d H:i:s', strtotime($end));
$this->getEntity()
     ->whereBetween('timestamp_col1', [$start, $end])
     ->orWhereBetween('timestamp_col2', [$start, $end])
     ->get();

答案 1 :(得分:0)

必须使用两个单独的WHERE BETWEEN子句。

where timestamp_col1 AND timestamp_col2 BETWEEN [...]并没有按照您的想法做。
该查询返回第一行为true的所有行,并且仅将WHERE BETWEEN子句应用于第二行。

看看这个例子:http://sqlfiddle.com/#!9/f6fe15/1