Привет.
Есть две модели Comment и Vote. Отношение Comment к Vote прописано следующим образом:
'userVote' => array(self::HAS_ONE, 'Vote', 'comment_id', 'condition' => 'userVote.author_id=' . Yii::app()->user->id)
Comment может иметь, а может и не иметь связь ‘userVote’. Но тем не менее, каждый раз происходит обращение к БД, для того, чтобы совершить выборку Vote по вышеприведенному условию.
Вызов связи Vote происходит в модели Comment следующим образом:
public function getUserVote()
{
if (!Yii::app()->user->isGuest)
return $this->userVote ? $this->userVote->value : null;
else
return null;
}
Комментариев может быть очень много. И для каждого из них формируется новый запрос к БД.
Логично было бы объединить все эти запросы в один и доставать userVote вместе с каждым Comment.
Делаю это следующим образом в контроллере:
$criteria = new CDbCriteria();
...
$criteria->with = array('userVote');
$allComments = Comment::model()->findAll($criteria);
Но извлекаются только те комментарии, у которых связь userVote не равна null.
Как можно достать все комментарии со связью userVote, а не только те, у которых она существует?
Если связь не существует, то $comment->userVote достать как null.