Просто чтобы уточнить, вы хотите получить все сообщения (и пользователя, который их разместил) с одним тегом?
Установите следующее отношение в модели тегов (оно должно быть уже там, если вы сгенерировали код с помощью Gii или yiic):
public function relations()
{
return array(
'posts'=>array(self::MANY_MANY, 'Post', 'tbl_post_tag(post_id, tag_id)'),
);
}
Это позволит вам получить все сообщения с таким тегом:
$myTag = Tag::model()->findByPk(1);
$posts = $myTag->posts;
Это не получает пользователя, хотя. Если вы хотите, чтобы пользователь каждого поста делал что-то вроде этого (при условии, что у вас установлены правильные отношения между пользователем и постом в модели поста):
foreach ($myTag->posts as $post) {
$theUser = $post->user;
$theUsersName = $post->user->name;
}
Упомянутая вами команда with()
относится к эффективности, так как она просто предварительно загружает реляционные запросы, вместо того, чтобы ждать выполнения каждого из них при вызове. Вы можете прочитать больше об этом здесь и в Справочнике классов .
Возможно, это не то, что вы ищете. Ваш вопрос был не совсем понятен.
Если вы пытаетесь выполнить большой запрос JOIN, вам нужно будет продолжить и, вероятно, написать запрос JOIN. Это зависит от того, что вы делаете, хотя. Не так уж плохо добавить условия JOIN и SELECT в оператор findall () .
Удачи!