【发布时间】:2014-03-13 12:43:59
【问题描述】:
如何检查日期范围是否重叠?我的模型中有这个,它一直在保存。
public function dateRangeExists($attribute, $params) {
$criteria = new CDbCriteria;
$criteria->compare('id_one',$this->id_one,true,);
$criteria->compare('id_two',$this->id_two,true,'OR');
// $criteria->addCondition('start_date < '.$this->start_date);
// $criteria->addCondition('end_date > '.$this->end_date);
$criteria->addBetweenCondition('start_date', $this->start_date, $this->end_date);
$criteria->addBetweenCondition('end_date', $this->start_date,$this->end_date);
$record = self::model()->exists($criteria);
if(!empty($record)) {
$this->addError('id', 'Item already exists within range.');
return false;
}
}
【问题讨论】:
-
所以您需要先检查给定的
date是否已经存在,然后再将条目保存到数据库中? -
如何定义重叠?
-
可能是因为你的变量类型
-
重叠是什么意思?它是在开始日期和结束日期之间还是重叠的开始日期和结束日期条目之间?
-
假设存在 2/1-5/31 的记录。因此,重叠了 1/3-4/30 的新记录。 4/15-7/10 也是重叠的
标签: php sql yii criteria date-range