1

テーブルの 1 つで検索を実行しようとしていますが、あるモデルから別のモデルへの hasMany 関係に条件を動的に追加しています。Cake がグループ条件をクエリに適用しないことを除いて、すべて正常に動作します。生成されたクエリをコピーして MySQL で実行し、Group By 条件を追加すると、うまく機能します。私は多くのことを試しましたが、役に立ちませんでした.Cake docsのFindページでグループをセットアップするように指示されているのと同じように、現在の方法がセットアップされています。以下で私がどのようにそれを行っているかを見つけることができます:

$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) . ')')));

モデルの hasMany 配列に直接入れようとしましたが、何もありません。グループの周りに配列を配置しようとしましたが、何もありません。私は本当に困惑しているので、誰かが助けてくれるなら、私はそれを大いに感謝します.

4

2 に答える 2

1

これは、クエリを作成する非常に奇妙な方法です:-S

このように書くことができます (Project hasMany ProjectTime を想定):

$result = $this->Project->find('all', array(
    'conditions'=>array(
        'Project.id'=>implode(",", $projectTimeArray)
    ),
    'joins'=>array(
        array(
            'table'=>'project_times',
            'alias'=>'ProjectTime',
            'type'=>'INNER',
            'conditions'=>array(
                'ProjectTime.project_id = Project.id',
                'ProjectTime.user_id'=>$this->Auth->user('id'),
                'ProjectTime.date_entry >='=>$firstDay
                'ProjectTime.date_entry <=' => $lastDay
            ),
            'order'=>array('ProjectTime.date_entry'=>'ASC'),
            'group'=>array('ProjectTime.date_entry')
        )
    )
));

(エディタに入力、未テスト;-)

于 2012-05-25T10:54:37.083 に答える
1

この回答が遅れていることは承知していますが、hasMany でグループを許可するようにコアを変更しました。なぜ CakePHP チームがそうする決定を下したのか、私にはよくわかりません。誰かがその理由について洞察を提供できる場合は、大いに感謝します。

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

        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'] がグループ キーに追加されました。

于 2015-01-09T20:40:53.373 に答える