0

Cakephp 2.1 のカスタム検索に苦労しています。

私のモデルでは、次の関数があります。

public function findByGenres($data = array()) {
        $this->Item2genre->Behaviors->attach('Containable', array('autoFields' => false));
        $this->Item2genre->Behaviors->attach('Search.Searchable');
        $query = $this->Item2genre->getQuery('all', array(
            'conditions' => array('Genre.name'  => $data['genre']),
            'fields' => array('item_id'),
            'contain' => array('Genre')
        ));
        return $query;
    }

これにより、次のクエリが返されます。

SELECT `Item`.`id` FROM `items` AS `Item` 
     WHERE `Item`.`id` 
       IN(SELECT `Item2genre`.`item_id` FROM `item2genre` AS Item2genre 
          LEFT JOIN `genres` AS Genre ON(`genre_id` = `Genre`.`id`) 
              WHERE `Genre`.`name` 
                IN ('Comedy', 'Thriller')
         ) 

クエリの結果は、「コメディ」または「スリラー」のジャンルが関連付けられたアイテムを返します。

「コメディ」と「スリラー」のジャンルが関連付けられたアイテムのみを返すようにクエリを変更するにはどうすればよいですか?

助言がありますか?

編集:

データの内容は次のとおりです。

'genre' => array(
                (int) 0 => 'Comedy',
                (int) 1 => 'Thriller'
            )
4

1 に答える 1

4

'conditions'キーを次のようにする必要があります。

'conditions' => array(
    array('Genre.name' => 'Comedy'),
    array('Genre.name' => 'Thriller')
)

したがって、具体的にはあなたの問題にあなた$data['genre']array('Comedy', 'Thriller'). したがって、次のようにして、必要なものと同様の内容を持つ変数を作成できます。

$conditions = array();
foreach ($data['genre'] as $genre) {
    $conditions[] = array('Genre.name' => $genre);
}
于 2012-12-03T14:10:52.070 に答える