0

我是 Yii 的新手,我很难将 SQL 查询翻译成 Yii Active Record 语言或使用查询生成器。

我有 3 个表: - 帖子:id、文本 - 标签:id、名称 - Post_Tag:id_post、id_tag

我想要做的是能够选择具有用户选择的所有标签的帖子:这是有效的 SQL 语句,我想翻译成 Yii 语言:

SELECT * FROM Post p INNER JOIN tags pt ON p.id=pt.post_id WHERE pt.tag_id in(10, 13) group by pt.post_id having count(distinct pt.tag_id) > 1;

有人有什么可以帮助我的吗?提前致谢 !

4

1 回答 1

0

要获取您的查询,您应该能够执行以下操作:

$criteria = new CDbCriteria(); 
$criteria->join = "INNER JOIN tags pt ON t.id=pt.post_id"; 
$criteria->addInCondition("pt.tag_id", array(10,13));
$criteria->group = "t.id";
$criteria->having = "COUNT(DISTINCT pt.tag_id) > 1";

$posts = Posts::model()->findAll($criteria);

如果您想要所有带有特定标签的帖子,您可以使用带有某些关系的标签模型。

在您的标记模型文件中:

public function relations()
{   
    return array(
        'postTags' => array(self::HAS_MANY, 'PostsTags', 'tag_id'),
        'posts' => array(self::HAS_MANY, 'Posts', array('post_id'=>'id'), 'through'=>'postTags'),
        //Other relations here
    );
}

然后你可以得到这样的标签的帖子:

$tag = Tags::model()->findByPk(10);
$posts = $tag->posts;

如果要过滤,可以向关系添加条件

于 2013-06-04T15:31:55.753 回答