2012-02-09 12 views
1

私は2つのテーブルのトピックと投稿を持っています。関係:トピックにはたくさんの投稿があります。どちらの表にも、内容を調整するためのステータスフィールド(Y、N)があります。私のページでは、少なくとも1つの投稿ステータスがNである、またはトピックステータス自体がNである、モデレートされていないトピックをすべて一覧にしたいと思います。cakephp2.0でfind関数を使用することは可能ですか?私はコンテナの動作を使用しています。Cakephpのコンプレックスは、子テーブルのカウントで条件を見つける

ページネーションも適用する必要があります。

答えて

1

動作するはずです:上の

  1. 検索のポストモデル(Nステータスの投稿)OR(投稿の魔女はNステータスのトピックに属しています) aあなたが投稿モデルにseachingしているので

    # TopicsController.php 
    
    $ids = $this->Topic->Post->find('list', array(
        'fields' => array('Post.topic_id') 
        'conditions' => array(
         'OR' => array(
          'Post.status' => 'N', 
          'Topic.status' => 'N', 
         ) 
        ) 
    )); 
    
    $this->paginate = array(
        'conditions' => array('Topic.id' => (array)$ids), 
        'order' => array('Topic.created' => 'DESC') 
    ); 
    
    $topics = $this->paginate('Topic'); 
    

    :ND

  2. 今すぐリストにIDとトピックをトピックモデルにこのような

何かを検索topic_idを保存CakePHPは親トピックデータに参加し、両方のステータスでフィルタリングすることができます。 :)

+0

ありがとうございます。でも、ページネーションを適用する必要があります。だから私はidsのすべてのリストを取得する必要があるたびに – binoy

+1

@ binoy私は更新しました..今はそれがデータのページを設定します。ページネーションは直接クエリに基づいていないので、ページを設定する前にすべてのIDを検索する必要があります。ほとんどの場合、サブクエリがここにあります –

1

私が正しく理解していれば、あなたは使用することができます。

$conditions => array ('OR' => array ('Topic.status' => 'N', 'Post.status' => 'N')); 
+0

返信いただきありがとうございます。私は説明します。私はトピックをリストするだけでいいです。例:topic1に2つの投稿postAとpostBがあり、postAのステータスがNの場合、topic1をリストしたいとします。また、投稿と状態がNでないtopic2がある場合は、それもリストしたいと思います。 – binoy

1

は、まあ、私はそれをテストしていませんが、以下ではこれが一つの解決策である

$this->recursive = -1;  //necessary to use joins 

    $options['joins'] = array(
    'table' => 'posts', 
    'alias' => 'Post', 
    'type' => 'left', 
    'conditions' => array('Topic.id = Post.topic_id', 'Post.status = N') //updated code 
    ); 
    $options['group'] = array('Topic.id HAVING count('Topic.id') >= 1 OR Topic.status = N'); 
    $this->Topic->find('all', $options); 
+0

Thanks .. cakephp2.xでこれを動作させていないようです。クエリをSELECTの 'Topic'.'id'、' Topic'.'user_id'、 'Topic'.'Title'、' Topic'.'body'、 'Topic'.'Source'、' Topic'.'Status '、'トピック 'から投稿'トピック '投稿投稿LEFT配列WHERE 1 = 1 GROUP BY 'トピック'。' id' HAVING count( 'Post'.id')> = 1 OR' Topic'.status' = 'N' – binoy

+0

私は として与えられました。$ this-> Topic-> find( 'all'、array( 'joins' => array( 'table' => 'posts'、 'alias' => 'Post' 、 'タイプ' => '左'、 '条件' =>配列( 'Topic.id = Post.topic_id AND Post.status = 'N' ) )、 'グループ'=>配列(' Topic.id HAVING count(Post.id)> = 1またはTopic.status = 'N' ))))); – binoy

+0

投稿を更新しました。それが役立つかどうかを見てください。 – Ehtesham

関連する問題