Group By使用cake php的Containable模型

时间:2013-11-26 15:55:19

标签: cakephp

您好我有以下关联的模型徽标

var $belongsTo = array(
    'Attachment' => array(
        'className'=>'Attachment',
        'foreignKey'=>'attachment_id'
    ),
    'Employee' => array(
        'className'=>'Employee',
        'foreignKey'=>'employee_id'
    )
);

var $hasMany = array(
    'Voting' => array(
        'className'=>'Voting',
        'foreignKey'=>'program_id'
    )
);

我用以下方式写了一个查询它会抛出错误

$PrgCond['contain'] = array(
    'Attachment',
    'Voting' => array(
        'fields' => array(
            'logo_program_id',
            'COUNT(employee_id) as noOfEmps'
        ),
        'group' => array('LogoVoting.logo_program_id')
    ), 
    'Employee' => array(
        'fields' => array('id', 'employee_number', 'first_name', 'last_name')
    )
);
$logoPrgDatas = $this->Program->find('all',$PrgCond);
 Thrown Error is 

SQL Error: 1054: Unknown column 'LogoVoting.logo_program_id' in 'field list' 

2 个答案:

答案 0 :(得分:1)

这是一个老问题,但仍会出现在Google搜索结果中。 我有一个类似的问题,发现当你有关联或在cakephp 1. *或2. *中使用可包含的行为(使用关联)时,你不能在模型查找选项中使用

但是,使用查询构建器在cakephp 3. *中修复了此问题! :)

答案 1 :(得分:0)

在您的字段中引用该模型是个好主意。例如,在条件或字段数组中使用列时,应将其称为Model.column_name

话虽如此,您遇到的问题很可能与该群体有关:

'group' => array('LogoVoting.logo_program_id')

模型中没有LogoVoting。它应该是:

'group' => array('Voting.logo_program_id')

所以我会将查询更新为:

$PrgCond['contain'] = array(
    'Attachment',
    'Voting' => array(
        'fields' => array(
            'Voting.logo_program_id',
            'COUNT(Voting.employee_id) as noOfEmps',
        ),
        'group' => array('Voting.logo_program_id'),
    ), 
    'Employee' => array(
        'fields' => array(
            'Employee.id',
            'Employee.employee_number',
            'Employee.first_name',
            'Employee.last_name',
        ),
    ),
);