CakePHP赢得';不按条件分组应用

CakePHP赢得';不按条件分组应用,php,mysql,cakephp,group-by,Php,Mysql,Cakephp,Group By,我试图在我的一个表上进行查找,并且动态地向hasMany关系添加条件,从一个模型到另一个模型。一切正常,但Cake不会将组条件应用于查询。如果我复制生成的查询并在MySQL中运行它,然后按条件添加我的Group,那么它工作得很好。我尝试了很多方法,但都没有成功,我现在的设置方式就像蛋糕文档中的“查找”页面告诉我设置分组依据一样。你可以在下面找到我是如何做到这一点的: $this->Project->hasMany['ProjectTime']['conditions'] = arra

我试图在我的一个表上进行查找,并且动态地向hasMany关系添加条件,从一个模型到另一个模型。一切正常,但Cake不会将组条件应用于查询。如果我复制生成的查询并在MySQL中运行它,然后按条件添加我的Group,那么它工作得很好。我尝试了很多方法,但都没有成功,我现在的设置方式就像蛋糕文档中的“查找”页面告诉我设置分组依据一样。你可以在下面找到我是如何做到这一点的:

$this->Project->hasMany['ProjectTime']['conditions'] = array('user_id'=>$this->Auth->user('id'), 'date_entry >= '.$firstDay.' AND date_entry <= '.$lastDay);
    $this->Project->hasMany['ProjectTime']['order'] = array('date_entry ASC');
    $this->Project->hasMany['ProjectTime']['group'] = 'ProjectTime.date_entry';
    $this->Project->hasMany['ProjectTime']['fields'] = array('ProjectTime.date_entry, ProjectTime.user_id, ProjectTime.project_id, SUM(ProjectTime.duration) AS durationTotal');        
    $result = $this->Project->find('all', array('conditions'=>array('Project.id IN (' . implode(",", $projectTimeArray) . ')')));

$this->Project->hasmy['ProjectTime']['conditions']=array('user\u id'=>$this->Auth->user('id'),'date\u entry>='.$firstDay'和date\u entry这是构建查询的一种非常奇怪的方式:-s

可以这样写(假设Project有很多ProjectTime):

$result=$this->Project->find('all',数组(
“条件”=>数组(
'Project.id'=>内爆(“,”,$projectTimeArray)
),
'连接'=>数组(
排列(
'表'=>'项目时间',
“别名”=>“项目时间”,
'类型'=>'内部',
“条件”=>数组(
'ProjectTime.project_id=project.id',
'ProjectTime.user_id'=>this->Auth->user('id'),
'ProjectTime.date_entry>='=>$firstDay

'ProjectTime.date_entry我知道这个答案已经晚了,但我修改了核心以允许hasMany中的组。我不确定CakePHP团队为什么做出这样的决定,如果有人能提供他们为什么这样做的见解,我将不胜感激

行:1730 of/lib/Cake/Model/Datasource/DboSource.php

        case 'hasMany':
            $assocData['fields'] = $this->fields($LinkModel, $association, $assocData['fields']);
            if (!empty($assocData['foreignKey'])) {
                $assocData['fields'] = array_merge($assocData['fields'], $this->fields($LinkModel, $association, array("{$association}.{$assocData['foreignKey']}")));
            }

            $query = array(
                'conditions' => $this->_mergeConditions($this->getConstraint('hasMany', $Model, $LinkModel, $association, $assocData), $assocData['conditions']),
                'fields' => array_unique($assocData['fields']),
                'table' => $this->fullTableName($LinkModel),
                'alias' => $association,
                'order' => $assocData['order'],
                'limit' => $assocData['limit'],
                'offset' => $assocData['offset'],
                'group' => $assocData['group'],
            );

值$assocData['group']已添加到组键。

您不需要内爆,CakePHP可以理解Project.id的数组。
        case 'hasMany':
            $assocData['fields'] = $this->fields($LinkModel, $association, $assocData['fields']);
            if (!empty($assocData['foreignKey'])) {
                $assocData['fields'] = array_merge($assocData['fields'], $this->fields($LinkModel, $association, array("{$association}.{$assocData['foreignKey']}")));
            }

            $query = array(
                'conditions' => $this->_mergeConditions($this->getConstraint('hasMany', $Model, $LinkModel, $association, $assocData), $assocData['conditions']),
                'fields' => array_unique($assocData['fields']),
                'table' => $this->fullTableName($LinkModel),
                'alias' => $association,
                'order' => $assocData['order'],
                'limit' => $assocData['limit'],
                'offset' => $assocData['offset'],
                'group' => $assocData['group'],
            );