我正在尝试以雄辩的格式编写以下查询:
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()
方法?谢谢。
答案 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
子句应用于第二行。