hi,
what is correct usage of this method?
I tried this:
$user = User::model()->findByPk(1);
$user->update(array('lastLogin' => date('Y-m-d H:i:s')));
throwing CDbException: No columns are being updated for table "user".
??
hi,
what is correct usage of this method?
I tried this:
$user = User::model()->findByPk(1);
$user->update(array('lastLogin' => date('Y-m-d H:i:s')));
throwing CDbException: No columns are being updated for table "user".
??
ok this works,
$user = User::model()->findByPk(1);
$user->lastLogin = date('Y-m-d H:i:s');
$user->update(array('lastLogin'));
Better approach
$user = User::model()->findByPk(1);
$user->lastLogin = new CDbExpression("NOW()");
$user->update(array('lastLogin'));
@ricardograna:
That depends - it’s not necessarily better. You have to think careful about timezone settings in PHP and MySQL.
@mbi:
Even shorter:
User::model()->updateByPk(1,array('lastLogin'=>date('Y-m-d H:i:s')));
It is better considering concurrency problem.
Using PHP date is not safe this case.
offtopic
thanx yiiframework, just forgot time - now I have a black pizza
I don’t really understand. Can you maybe give an example for a problematic situation? I’m willing to learn.
BTW: We’ve already discussed some “best practices” for date/time handling with PHP + DB here.
Trying an example:
Process A -> Incoming at 08:30:00.00 (PHP date - the same)
Process B -> Incoming at 08:30:00.05 (PHP date - the same)
Process A -> Process Time: 50ms
Process B -> Process Time: 30ms
Process A -> DB request at 08:30:00.50
Process B -> DB request at 08:30:00.35
Process A -> date: 08:30:00.00 (received by DB at 08:30:00.50)
Process B -> date: 08:30:00.05 (received by DB at 08:30:00.35)
Analysing by DB date, process A was saved before process B, which is not true. For concurrency issues, it is safer to use DB dates (got at "insert" moment)
Good point, thanks. Even if i can’t think of many applications where this really matters it’s good to keep that in mind.