find()中的$ $条件无法使用虚拟域。
我的员工模型上有这个虚拟域:
var $virtualFields = array(
'AgentFullName' => "CONCAT(Employee.id, ' ', Employee.emp_ape_pat, ' ', Employee.emp_ape_mat, ' ', Employee.name)"
);
我正在使用这个条件来查看两个字段,一个是常规字段,一个是虚拟字段(
$idconditions = array(
'OR' => array(
'Employee.id LIKE' => $this->passedArgs['valsearch'],
'Employee.AgentFullName LIKE' => $this->passedArgs['valsearch']
));
在查找可在虚拟字段中找到的有效文本时,我的查找不返回任何记录:
$theid = $this->Horario->Employee->find('first', array(
'fields' => array('Employee.emp_appserial', 'Employee.AgentFullName'),
'conditions' => $idconditions,
));
但是,sql_dump似乎是正确的:
当find()查找id号时:
SELECT `Employee`.`emp_appserial`, (CONCAT(`Employee`.`id`, ' ', `Employee`.`emp_ape_pat`, ' ', `Employee`.`emp_ape_mat`, ' ', `Employee`.`name`)) AS `Employee__AgentFullName` FROM `devopm0_5`.`employees` AS `Employee` WHERE ((`Employee`.`id` LIKE 1005) OR ((CONCAT(`Employee`.`id`, ' ', `Employee`.`emp_ape_pat`, ' ', `Employee`.`emp_ape_mat`, ' ', `Employee`.`name`)) LIKE '1005')) LIMIT 1
使用姓氏的find()(不返回记录)
SELECT `Employee`.`emp_appserial`, (CONCAT(`Employee`.`id`, ' ', `Employee`.`emp_ape_pat`, ' ', `Employee`.`emp_ape_mat`, ' ', `Employee`.`name`)) AS `Employee__AgentFullName` FROM `devopm0_5`.`employees` AS `Employee` WHERE ((`Employee`.`id` LIKE 'SMITH') OR ((CONCAT(`Employee`.`id`, ' ', `Employee`.`emp_ape_pat`, ' ', `Employee`.`emp_ape_mat`, ' ', `Employee`.`name`)) LIKE 'SMITH')) LIMIT 1
我想知道为什么虚拟场不能进行搜索。
你能帮忙吗?
非常感谢!
答案 0 :(得分:0)
您不能将VirtualField用作SQL条件。 执行查找后,虚拟字段将添加到结果中,这就是您无法对其进行调整的原因。 The Cookbook says:
这些字段无法保存,但会像其他模型字段一样进行读取操作。它们将在模型的键下与其他模型字段一起编入索引。