Php Yii2-模型:查找两个不同日期的范围
我想选择两个不同日期范围内的项目(Php Yii2-模型:查找两个不同日期的范围,php,activerecord,yii2,yii2-model,Php,Activerecord,Yii2,Yii2 Model,我想选择两个不同日期范围内的项目(datetimetype in Database)。在这种情况下,您希望选择dateStart和dateEnd范围内的所有项目 表格数据示例: 澄清图片: 请注意,我不想在日期之间搜索,例如: Model::find() ->where(['between', 'dateStart', "2017-01-06", "2017-02-11"]) ->all(); 。。因为之间的不在范围内 在这一错误输出中使用中间结果: 例如,首选
datetime
type in Database)。在这种情况下,您希望选择dateStart
和dateEnd
范围内的所有项目
表格数据示例:
澄清图片:
请注意,我不想在日期之间搜索,例如:
Model::find()
->where(['between', 'dateStart', "2017-01-06", "2017-02-11"])
->all();
。。因为之间的不在范围内
在这一错误输出中使用中间结果:
例如,首选输出:
通过使用ActiveRecord搜索startDate>=
2017-01-05
和endDate选择的(基于上述表格数据)项,您可以按照以下顺序执行->或其中:
$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();
$dateStart='2017-01-05';
$dateEnd='2017-01-11';
模型::find()
->或其中(['between','dateEnd',$dateStart,$dateEnd])
->或其中(['between','dateStart',$dateStart,$dateEnd])
->orWhere(['和',“dateEnd>='”,“$dateEnd.”,“,”dateStart使用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();
$dateStart='2017-01-05';
$dateEnd='2017-01-11';
模型::find()
->或其中(['between','dateEnd',$dateStart,$dateEnd])
->或其中(['between','dateStart',$dateStart,$dateEnd])
->或其中(['和',“dateEnd>='”,“$dateEnd.”,“DateStart您能解释一下样本之间的日期与搜索样本中的日期之间一天的差异吗?。我不明白您指定的日期与搜索样本之间的差异>=和@scaisEdge请看一看图片,它确实解释了这一点。在使用between 。你能解释一下样本之间的日期与搜索样本中的日期之间一天的差异吗?。我不明白你分配给样本之间和搜索样本之间的差异>=和@scaisEdge请看一看图片,它确实解释了。我还添加了一个输出示例,当使用介于之间时nks,但我正在寻找一个yii2活动记录模型解决方案。我在web上发现了这个解决方案。我不是在寻找SQL解决方案。无论如何,谢谢。好的。我理解。你需要确切的活动记录吗?我担心AR没有这样的机会。但是使用DAO(不是普通的SQL),您可以使用查询生成器。使用此;查询生成器是复杂查询的合适工具。Oleg,是的,我知道,但可能有一个基于运算符的解决方案-因此..我认为使用AR是可能的。可能使用
运算符。->或where(['between',dateEnd',$dateLeft,$dateRight])->或where(['between','dateStart',$dateLeft,$dateRight])->或者在哪里(['and',“dateEnd>=$dateRight”,“dateStartGreat,这就像一个符咒。你能更新你的答案吗?=)谢谢,但我正在寻找一个yii2活动记录模型解决方案。我在web上发现了这个解决方案。我不是在寻找SQL解决方案。无论如何,谢谢。好的。我明白。你需要确切的活动记录吗?我担心AR没有这样的机会。但是使用DAO(不是普通的SQL),您可以使用查询生成器。使用此;查询生成器是复杂查询的合适工具。Oleg,是的,我知道,但可能有一个基于运算符的解决方案-因此..我认为使用AR是可能的。可能使用
运算符。->或where(['between',dateEnd',$dateLeft,$dateRight])->或where(['between','dateStart',$dateLeft,$dateRight])->或者在哪里(['and',“dateEnd>=$dateRight”,“dateStartGreat,这就像一个符咒。你能更新你的答案吗?=)
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
$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();