在一个模型上,查询可以正常工作,但对于另一个模型,它不会...
$this->paginate = array('conditions' => array(
array( $model.'group_id' => array(2,3,4) ),
'OR' => array('name LIKE ' => "%$searchTerm%",
'desc LIKE ' => "%$searchTerm%",
'modified LIKE ' => "%$searchTerm%")));
我尝试过没有群组ID,只搜索了查询和“或”。但是,当我进入Foo时,我仍然会得到Bar和Baz。我检查表格以防万一Foo包含在Bar / Baz中,但事实并非如此。所以我的情况一定是错的......
好的,从调试这是实际查询,当searchTerm为Foo时返回不匹配的行:
SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`pin`, `User`.`is_ldap`, `User`.`ldap_username`, `User`.`fullname`, `User`.`group_id`, `User`.`password_changed`, `User`.`last_login`, `User`.`status`, `User`.`created`, `User`.`modified`, `Group`.`id`, `Group`.`parent_id`, `Group`.`lft`, `Group`.`rght`, `Group`.`name`, `Group`.`description`, `Group`.`status`, `Group`.`created`, `Group`.`modifed` FROM `crfsystem`.`users` AS `User` LEFT JOIN `crfsystem`.`groups` AS `Group` ON (`User`.`group_id` = `Group`.`id`) WHERE `User`.`group_id` IN (4, 5, 6, 7, 19, 16, 3) AND ((`User`.`username` LIKE '%foo%') OR (`User`.`is_ldap` LIKE '1') OR (`User`.`ldap_username` LIKE '%foo%') OR (`User`.`fullname` LIKE '%foo%') OR (`User`.`password_changed` LIKE '%foo%') OR (`User`.`last_login` LIKE '%foo%') OR (`User`.`status` LIKE '%foo%') OR (`User`.`created` LIKE '%foo%') OR (`User`.`modified` LIKE '%foo%'))
据我所知,WHERE中有“两个”条件:
A and (B or C or D ...)
那么,返回A为真且(..)为真的行,对吧?但是......是什么...... OH! 我想我知道......我需要忽略布尔字段,因为无论搜索字词如何,它们都会评估为1 / True。
答案 0 :(得分:0)
请尝试以下操作:
$this->paginate = array('conditions' => array(
$model.'group_id' => array(2,3,4),
'OR' => array(
array('name LIKE ' => "%$searchTerm%"),
array('desc LIKE ' => "%$searchTerm%"),
array('modified LIKE ' => "%$searchTerm%")
)
)
);
答案 1 :(得分:0)
当您使用布尔字段执行LIKE'%searchTerm%'时,它的计算结果为true,以便返回这些行!