0

私は Yii を初めて使用し、SQL クエリを Yii Active Record 言語またはクエリ ビルダに変換するのに苦労しています。

私は3つのテーブルを持っています: - 投稿: id、テキスト - タグ: id、名前 - Post_Tag: id_post、id_tag

私がやりたいことは、ユーザーが選択したすべてのタグを持つ投稿を選択できるようにすることです: これが機能し、Yii 言語に翻訳したい SQL ステートメントです:

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 に答える