Yii的。许多关系的条件

时间:2014-09-23 16:30:44

标签: php search yii many-to-many conditional-statements

我结构简单: 用户有帖子,帖子有标签。

如何获取分配了给定用户帖子的所有标签?

我试过这样做:

$criteria = new CDbCriteria();

$criteria->together = true;
$criteria->with = array('posts');

$criteria->addSearchCondition('posts.user_id', $this->id);
//or this (by the way, what's the difference?):
//$criteria->compare('posts.user_id', $this->id);

$tags = Tag::model()->findAll($criteria);

但它有问题..这个条件给我标签,仅分配此用户的帖子。但我需要获取至少分配了该用户的一个帖子的标签。

换句话说,如果是标签,它分配了两个帖子:post1和post2(post1.user_id = 1 post2.user_id = 2),但我的用户有id = 1,那么这个标签不会是结果。但我希望得到这个标签,因为它分配了post1(post1.user_ud = 1),我不关心其他帖子/用户。

1 个答案:

答案 0 :(得分:1)

如果我理解这一点,那么您正在寻找一种方法来获取用户使用过的所有标签。 设置MANY_to_MANY rel的最简单方法是在模型关系中:

用户模型中的

function relations()
{
    return array(
        'tags' => array(
            self::MANY_MANY,
            'Tag',
            'posts(user_id, tag_id)'
        ),
    );
}

然后使用您的模型,您就可以请求它们:

//gives you all the tags for user with PK 1
$usertags = User::model()->findByPK(1)->tags; 

参考:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship

编辑:根据评论我编辑我的帖子,在Active Record上有更多例子

$criteria=new CDbCriteria;
$criteria->with='tags'; 
$criteria->select='tag_name'; 
$criteria->condition='user=:userID';
$criteria->params=array(':userID'=>10);
$usertags =User::model()->findAll($criteria);