CakePHP 2.0 - virtualFields不用于带选项的查找操作

时间:2012-02-13 17:26:00

标签: php mysql cakephp cakephp-2.0

我正在使用CakePHP 2.0,我有一个带有'virtualFields'的模型:

Country.php:

var $virtualFields = array(
    'path' => "CONCAT_WS('/', dirname, basename)"
);

如果我在使用“用户”的控制器中执行此操作

$users = $this->User->find('all');

设置了虚拟字段path

如果我在我的控制器中使用它,它也使用“用户”

$options['fields'] = array(
    'DISTINCT User.*'
);
$options['joins'] = array(
    array(
        'table' => 'courses',
        'type' => 'inner',
        'conditions' => array(
            'User.id = courses.user_id'
        )
    ),
    array(
        'table' => 'times',
        'type' => 'inner',
        'conditions' => array(
            'courses.id = times.course_id'
        )
    )
);
$options['conditions'] = array(
    'times.amount > ' => 0
);

$users = $this->User->find('all', $options);

使用这些选项时,path字段未设置,当然,SQL查询似乎没有包含“CONCAT_WS('/',dirname,basename)”字段,如果我包括在没有选项的情况下执行find操作。

如果有选项,我可以做什么,以便自动包含虚拟字段?当然我可以用fields选项写入CONCAT,但这不是很好,特别是如果我改变它。

最好的问候。

1 个答案:

答案 0 :(得分:1)

使用group by而不是distinct,并完全删除fields选项。

$options['group'] = array(
    'User.*'
);
$options['joins'] = array(
    array(
        'table' => 'courses',
        'type' => 'inner',
        'conditions' => array(
            'User.id = courses.user_id'
        )
    ),
    array(
        'table' => 'times',
        'type' => 'inner',
        'conditions' => array(
            'courses.id = times.course_id'
        )
    )
);
$options['conditions'] = array(
    'times.amount > ' => 0
);

$users = $this->User->find('all', $options);