在CakePHP 2找到方法中的2个字段之间进行相乘

时间:2015-04-03 12:44:04

标签: cakephp cakephp-2.0

我想在我的查找操作中计算2个字段的乘积,并在返回的数据中包含所包含的答案。这两个字段属于2个相关模型。

2型号:A和B. A与B有属关系。

A有字段'val1',B有字段'val2'。在查找操作之后,我希望将这两个值的乘积存储在'A.prod'中。

我尝试了什么:


$this->A->find('all', array('fields' => array('val1', 'B.val2', '(val1*B.val2) AS prod'))

这几乎可以使用,但是将产品放在一个新的数组中,而不是A:

(int) 0 => array(
        (int) 0 => array(
            'prod' => '6'
        ),
        'A' => array(
            'val1' => '3'
        )
        'B' => array(
            'val2' => '2'
        )
    ),

也尝试过:

$this->A->find('all', array('fields' => array('val1', 'B.val2', '(val1*B.val2) AS A.prod'))

但这会产生MySQL错误。


使用虚拟字段:

$this->A->virtualFields = array('prod' => 'A.val1*val2');
$this->B->virtualFields = array('val2' => 'B.val2');
$this->A->virtualFields += $this->B->virtualFields;
$this->A->find('all', array('fields' => array('prod', 'B.val2'))

这会在“字段列表”中显示错误“未找到列:1054未知列'val2'”

1 个答案:

答案 0 :(得分:2)

这应该有效:

$this->A->virtualFields = array('prod' => 'A.val1 * B.val2');
$this->A->find('all', array('fields' => array('prod'));