Yii2 - 模型:找到两个不同日期在范围内的位置

Yii2 - Model: find where two different dates are in range

我想要 select 两个不同日期范围内的项目(datetime 在数据库中键入)。在这种情况下,想要 select dateStartdateEnd 范围内的所有项目。

示例table数据:

id | dateStart  | dateEnd
---+------------+-----------+
3  | 2017-01-05 | 2017-01-07
6  | 2017-01-06 | 2017-01-10
8  | 2017-01-05 | 2017-01-11
11 | 2017-01-03 | 2017-01-04
12 | 2017-01-04 | 2017-01-10
15 | 2017-01-04 | 2017-01-18
17 | 2017-01-08 | 2017-01-10
25 | 2017-01-12 | 2017-01-15
31 | 2017-01-11 | 2017-01-24

澄清图片:


请注意,我不想在日期之间进行搜索,例如:

Model::find()
    ->where(['between', 'dateStart', "2017-01-06", "2017-02-11"])
    ->all();

.. 因为 between 不是 in range.

在这个错误输出中使用 between 结果:

id | dateStart  | dateEnd
---+------------+-----------+
6  | 2017-01-06 | 2017-01-10
8  | 2017-01-05 | 2017-01-11
11 | 2017-01-03 | 2017-01-04
12 | 2017-01-04 | 2017-01-10
15 | 2017-01-04 | 2017-01-18

例如首选输出:

通过搜索开始日期 >= 2017-01-05 和结束日期 <= 2017-01-11 的 selected(基于上面的 table 数据)项目应该如下所示:

id | dateStart  | dateEnd
---+------------+-----------+
3  | 2017-01-05 | 2017-01-07
6  | 2017-01-06 | 2017-01-10
8  | 2017-01-05 | 2017-01-11
12 | 2017-01-04 | 2017-01-10
15 | 2017-01-04 | 2017-01-18
17 | 2017-01-08 | 2017-01-10
31 | 2017-01-11 | 2017-01-24

注意:我正在寻找基于 Yii2 ActiveRecord 模型的答案。

使用 ActiveRecord 你可以像这样的子句序列 ->orWhere:

$dateStart = '2017-01-05';
$dateEnd = '2017-01-11';

Model::find()
   ->orWhere(['between', 'dateEnd', $dateStart , $dateEnd]) 
   ->orWhere(['between', 'dateStart', $dateStart , $dateEnd]) 
   ->orWhere(['and', "dateEnd>='".$dateEnd."'", "dateStart<='".$dateStart ."'"])
   ->all();