cakephp 2.1在虚拟场上进行调节时无法找到()

时间:2012-11-13 03:26:06

标签: find cakephp-2.1

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

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

你能帮忙吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您不能将VirtualField用作SQL条件。 执行查找后,虚拟字段将添加到结果中,这就是您无法对其进行调整的原因。 The Cookbook says

  

这些字段无法保存,但会像其他模型字段一样进行读取操作。它们将在模型的键下与其他模型字段一起编入索引。