2012-05-24 28 views
1

我正在尝试在我的一个表上进行查找,并且我正在动态地将hasMany关系的条件从一个模型添加到另一个模型。一切工作正常,除了Cake不会将组条件应用于查询。如果我复制生成的查询,并在MySQL中运行它并添加我的分组条件,它会很好地工作。我尝试了很多东西,但都无济于事,现在我拥有它的方式就像Cake文档中的查找页面设置告诉我通过设置一个组。你可以在下面找到我是如何做到的:CakePHP不会按条件应用分组

$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数组中 - 什么都没有。我曾尝试在该组周围放置一个阵列 - 什么都没有。我真的很难过,所以如果有人能帮忙,我会非常感激。

回答

1

这是一个非常奇怪的方式来构建查询:-S

可以这样写(假设项目的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') 
     ) 
    ) 
)); 

(键入到编辑,未经测试;-)

+0

您不需要崩溃,CakePHP理解Project.id的数组。 – mark

1

我知道这个答案很晚,但我修改了核心以允许hasMany中的组。我不确定为什么CakePHP团队做出了这样的决定,如果任何人都可以提供洞察力,为什么他们有,我将不胜感激。

线:1730 /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 [ '基团']的加入到该组密钥。