0

find()の$ conditionは、virtualfieldを利用できません。

従業員モデルに次の仮想フィールドがあります。

        var $virtualFields = array(
            'AgentFullName' => "CONCAT(Employee.id, ' ', Employee.emp_ape_pat, ' ', Employee.emp_ape_mat, ' ', Employee.name)"
        );

この条件を使用して、2つのフィールド、1つは通常、もう1つは仮想(

        $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

VirtualFieldsをSQL条件として使用することはできません。検索が実行された後、仮想フィールドが結果に追加されるため、仮想フィールドを条件付けすることはできません。 クックブックによると

これらのフィールドは保存できませんが、読み取り操作の他のモデルフィールドと同様に扱われます。それらは、他のモデルフィールドと一緒にモデルのキーの下にインデックスが付けられます。

于 2012-11-13T09:43:31.667 に答える