Odd behavior of now () and db \ Expression in yii2 / mysql

I cannot make the following code behave as it should (delete expired records). Simple test code:

Definition of table test_expire:

CREATE TABLE `test_expire` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `expire` timestamp NOT NULL,
 PRIMARY KEY (`id`)
);

the code:

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";

Well, I expect all deleteAll expressions to be the same, with each one not deleting entries. But the latter does. Here's the conclusion:

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

The question is why this happens and how to make it work as intended?

+4
source share
1 answer

Well, the last sql query:

DELETE FROM `test_expire` WHERE expire < 'NOW()';

Instead

DELETE FROM `test_expire` WHERE expire < NOW();

Thanks for reporting this error, I created the problem here: https://github.com/yiisoft/yii2/issues/6382

. Yii, - pdo, db.

+1

All Articles