0

我在 find() 中的 $condition 无法使用虚拟字段。

我的 Employee 模型上有这个虚拟字段:

        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

我想知道为什么虚拟场不能被搜索。

你能帮我吗?

非常感谢 !

4

1 回答 1

0

You cannot use VirtualFields as SQL Conditions. The virtual fields are added to the results after the find is performed, and this is why you cannot condition on them. The Cookbook says:

These fields cannot be saved, but will be treated like other model fields for read operations. They will be indexed under the model’s key alongside other model fields.

于 2012-11-13T09:43:31.667 回答