mbi
(mbi)
1
I want to increment a post->commentCounter after creating a new comment for a post.
This action will be executed in comment->afterSave(), right?
Whats better?
-
load the post + save $post->commentCounter++
-
query the comment table SELECT COUNT() FROM comment WHERE postId = :postId, then load post + update commentCounter
-
using a transaction
sluderitz
(Sluderitz)
2
The result of your action should be a single UPDATE statement like this: UPDATE post SET comment_counter = comment_counter + 1 WHERE id = x;
This way no transaction is required.
So you could do:
$post = post::model()->findByPk($postId);
$post->comment_counter = new CDbExpression('comment_counter + 1');
$post->save();
Or you could do it even shorter using Yii’s built in updateCounters function
post::model()->updateCounters(array('comment_counter' => 1), 'id = :id', array(':id' => $postId));
pestaa
(Pestaa)
3
FYI, this can be done via
UPDATE `postTable` SET `commentCount`=(SELECT COUNT() FROM `comment` WHERE `postId`=:postid) WHERE `postId`=:postid
This way you can save up to 2 queries, since ar record doesn’t have to be loaded and resaved.
Thus I also recommend sluderitz’s suggestion, to use updateCounters().
mbi
(mbi)
4
ok, thank you both, problem solved