2017-03-11 11 views
0

:たとえばCakePHPの3検索タグ

public function findTagged(Query $query, array $options) { 
    return $this->find() 
    ->distinct(['Articles.id']) 
    ->matching('Tags', function ($q) use ($options) { 
    if (empty($options['tags'])) { 
     return $q->where(['Tags.title IS' => null]); 
    } 
    return $q->where(['Tags.title IN' => $options['tags']]); 
    }); 
} 

は、アドレス記事/タグ付き/テスト/新しいと、それはタグ「テスト」ORタグ「新しい」との記事があります。私はこのコードをCakePHPの方法で修正して、タグ "test"とタグ "new"を持つ記事を取得したいと思います。

アイデアはありますか?ここで

+0

あなたが探しているようなサウンド** http://stackoverflow.com/questions/30938440/how-to-match-records-that-are-associated-with-a-specific-set-of-その他のレコード** – ndm

答えて

1

は、あなたの質問のためのソリューションです:は、以下のようにあなたのファインダクエリを更新 -

public function findTagged(Query $query, array $options){ 
    $this->opt = $options['tags']; 
    $articles = $this->find() 
     ->select(['Articles.id', 'Articles.url', 'Articles.title', 'Articles.description']) 
     ->matching('Tags', function ($query) { 
      return $query->where(['Tags.title IN' =>$this->opt]); 
     })->group(['Articles.id']) 
     ->having([ 
      $this->Users->query()->newExpr('COUNT(DISTINCT Tags.title) = '.count($this->opt)) 
     ]); 

    return $articles; 
} 

上記のクエリは、記事のためだけmatching tagsを返します。

関連する問題