我正在尝试根据与它们相关的类别过滤一些汽车零件。一个部分可以有很多类别(在代码中它们被称为标签),所以我选择了带有连接表的 HABTM 关系。
到目前为止,过滤工作有效,但仅适用于使用 SQL 命令 IN 的带有蛋糕的 OR 条件。但我试图仅过滤具有所有选定类别的部分,因此我需要在类别数组上使用 AND 条件。
这是从控制器中提取的代码:
$this->Part->bindModel(array('hasOne' => array('PartsTagsJoin')));
$params['conditions'] = array('AND' => array('PartsTagsJoin.tag_id' => $selectedCats));
$params['group'] = array('Part.id');
$parts = $this->Part->find('all',$params);
$this->set('parts',$parts);
$selectedCats 是这样的数组:array(1,2,3,4,5);
SQL 输出为:
'SELECT `Part`.`id`, `Part`.`name`, `Part`.`image`, `Part`.`image_dir`, `Part`.`time_created`, `Part`.`time_edited`, `Part`.`user_id`, `Part`.`editor_id`, `Part`.`notice`, `User`.`id`, `User`.`username`, `User`.`password`, `User`.`usergroup_id`, `User`.`realname`, `PartsTagsJoin`.`id`, `PartsTagsJoin`.`part_id`, `PartsTagsJoin`.`tag_id`
FROM `c33rdfloor`.`parts` AS `Part`
LEFT JOIN `c33rdfloor`.`users` AS `User` ON (`Part`.`user_id` = `User`.`id`)
LEFT JOIN `c33rdfloor`.`parts_tags_join` AS `PartsTagsJoin` ON (`PartsTagsJoin`.`part_id` = `Part`.`id`)
WHERE `PartsTagsJoin`.`tag_id` IN (1, 4, 8, 24)'
如何过滤具有通过 $selectedCats 数组提交的每个 id 的部分。
预先感谢您的帮助。