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 回答