Yii2 - 模型:找到两个不同日期在范围内的位置
Yii2 - Model: find where two different dates are in range
我想要 select 两个不同日期范围内的项目(datetime
在数据库中键入)。在这种情况下,想要 select dateStart
和 dateEnd
范围内的所有项目。
示例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();
我想要 select 两个不同日期范围内的项目(datetime
在数据库中键入)。在这种情况下,想要 select dateStart
和 dateEnd
范围内的所有项目。
示例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();