В структуре Yii я пытаюсь выяснить, как запрашивать и получать результаты, соответствующие нескольким тегам в следующей системе:
posts
id
tags
id
post_tags
post_id
tag_id
Я пытаюсь выяснить, как вернуть результат постов, которые соответствуют тегу 1 и тегу 2. Любая помощь с этим будет очень признательна.
EDIT
Пока у меня, кажется, все работает так:
В Post
отношениях:
array(
'tags' => array( self::MANY_MANY, 'Tag', Yii::app()->db->tablePrefix . 'post_tag(post_id,tag_id)' ),
);
В PostTag
отношениях
array(
'post' => array( self::BELONGS_TO, 'Post', 'post_id' ),
'tag' => array( self::BELONGS_TO, 'Tag', 'tag_id' ),
);
По моему Controller
$tags = array( 1, 2, 3 ); // Match N tags
$criteria = new CDbCriteria();
$criteria->with = 'post';
$criteria->addInCondition( 'tag_id', $tags );
$criteria->group = 'post_id';
$criteria->having = 'COUNT(*) = ' . count( $tags );
$matchedPostTags = PostTag::model()->findAll( $criteria );
foreach( $matchedPostTags as $matchedPostTag )
{
$post = $matchedPostTag->post;
// Do what you want with it.
}
Теперь, если кто-нибудь сможет понять, как заставить это работать с CActiveDataProvider, я был бы признателен.