4
我不能让下面的代码行为像它应该(删除过期的记录)。简单的测试代码:now()和db Expression在yii2/mysql中的奇怪行为
test_expire表定义:
CREATE TABLE `test_expire` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`expire` timestamp NOT NULL,
PRIMARY KEY (`id`)
);
代码:
TestExpire::deleteAll();
$record = new TestExpire();
$record->expire = new Expression("NOW() + INTERVAL 1 MONTH");
$record->save();
$record = new TestExpire();
$record->expire = new Expression("NOW() + INTERVAL 1 YEAR");
$record->save();
$records = TestExpire::find('expire > :expire', ['expire' => date('Y-m-d')])->all();
echo "Records (" . count($records) . "):\n";
foreach($records as $record) {
echo "Expire: " . $record->expire . "\n";
}
TestExpire::deleteAll("expire < NOW()");
$records = TestExpire::find('expire > :expire', ['expire' => date('Y-m-d')])->all();
echo "Records after delete 1: " . count($records) . "\n";
TestExpire::deleteAll("expire < :expire", [':expire' => date('Y-m-d G:i:s')]);
$records = TestExpire::find('expire > :expire', ['expire' => date('Y-m-d')])->all();
echo "Records after delete 2: " . count($records) . "\n";
TestExpire::deleteAll("expire < :expire", [':expire' => new Expression("NOW()")]);
$records = TestExpire::find('expire > :expire', ['expire' => date('Y-m-d')])->all();
echo "Records after delete 3: " . count($records) . "\n";
嗯,我希望所有的deleteAll表情是一样的,他们每个人的不删除记录。但最后一个呢。这里的输出:
Records (2):
Expire: 2015-01-05 14:52:02
Expire: 2015-12-05 14:52:02
Records after delete 1: 2
Records after delete 2: 2
Records after delete 3: 0
问题是为什么会发生,以及如何使其按预期工作?
我没想到:)谢谢。 – Andrey 2014-12-05 11:02:13
答复已更新。 – soju 2014-12-05 15:11:47