> Why is it giving me the "AND `ModelName`.`project_id` =
> `Project`.`id`" for all the related models though? They're not
> associated like that..

Support for foreignKey => false was added in 6258 :
https://trac.cakephp.org/changeset/6258

Before that, foreignKey => false just used the default, which is what
is happening in your code. If you can't upgrade, the only way I can
think of is to handle beforeFind() and add the joins manually to
$queryData['joins'].

Also, you don't seem to have the 'group by' clause in there either.
Not sure what version that was added in.

On Jan 15, 4:41 pm, kristofer <[EMAIL PROTECTED]> wrote:
> I'm getting closer..
>
> SELECT SUM(`Hour`.`time`), `Project`.`id`
> FROM `projects` AS `Project`
> LEFT JOIN `milestones` AS `Milestone`
>     ON (`Milestone`.`project_id` = `Project`.`id`)
> LEFT JOIN `tasks` AS `Task`
>     ON (`Task`.`milestone_id`=`Milestone`.`id` AND `Task`.`project_id`
> = `Project`.`id`)
> LEFT JOIN `hours` AS `Hour`
>     ON (`Hour`.`task_id`=`Task`.`id` AND `Hour`.`project_id` =
> `Project`.`id`)
> WHERE `Project`.`id` = 1 LIMIT 1
>
> Why is it giving me the "AND `ModelName`.`project_id` =
> `Project`.`id`" for all the related models though? They're not
> associated like that..
>
> On Jan 15, 11:28 am, grigri <[EMAIL PROTECTED]> wrote:
>
> > That will probably be :
>
> > return $result[0]['SUM(`Hour`.`time`)'];
>
> > at the end
>
> > On Jan 15, 4:25 pm, grigri <[EMAIL PROTECTED]> wrote:
>
> > > First off, it really depends on your cake version. I'm assuming you're
> > > on 1.2 beta or above:
>
> > > Try something like this:
>
> > > function getHours($id = null) {
> > >   $this->recursive = 0;
> > >   if ($id === null) {
> > >     $id = $this->id;
> > >   }
>
> > >   $this->unbindModel(array('belongsTo' => array('Client', 'User')));
> > >   $this->bindModel(array('hasOne' => array(
> > >     'Milestone' => array(),
> > >     'Task' => array('foreignKey' => false, 'conditions' =>
> > > 'Task.milestone_id=Milestone.id',
> > >     'Hour' => array('foreignKey' => false, 'conditions' =>
> > > 'Hour.task_id=Task.id',
> > >   ))));
> > >   $conditions = array('Project.id' => $id, '1=1 GROUP BY Project.id');
> > >   $fields = array('SUM(`Hour`.`time`)');
>
> > >   $result = $this->find('first', compact('fields', 'conditions'));
>
> > >   return $result['SUM(`Hour`.`time`)'];
>
> > > }
>
> > > On Jan 15, 3:31 pm, kristofer <[EMAIL PROTECTED]> wrote:
>
> > > > The main model is a Project. A Project hasMany Milestone. A Milestone
> > > > hasMany Task. A Task hasMany Hour.
>
> > > > I'm hoping to use Model::find() to build this query (or something like
> > > > it..):
> > > > ====
> > > > SELECT  `Project`.`id`,
> > > >         SUM(`Hour`.`time`)
>
> > > > FROM `projects` AS `Project`
>
> > > > LEFT JOIN `milestones` AS `Milestone`
> > > >         ON `Milestone`.`project_id` = `Project`.`id`
>
> > > > LEFT JOIN `tasks` AS `Task`
> > > >         ON `Task`.`milestone_id` = `Milestone`.`id`
>
> > > > LEFT JOIN `hours` AS `Hour`
> > > >         ON `Hour`.`task_id` = `Task`.`id`
>
> > > > WHERE 1 = 1
> > > > GROUP BY `Project`.`id`;
> > > > ====
>
> > > > Here's the function in the Project model I'm using to try building the
> > > > query.. if I comment out the $fields[] = 'SUM(..)' line it pulls all
> > > > the model data recursively.. but it does it with a separate query per
> > > > table instead of using joins.
>
> > > > ====
> > > >         function getHours($id = null) {
> > > >                 $this->recursive = 3;
> > > >                 if($id == null)
> > > >                         $id = $this->id;
>
> > > >                 $this->unbindModel(array('belongsTo' => array('Client', 
> > > > 'User')));
> > > >                 $fields = null;
> > > >                 $conditions = array('`Project`.`id`' => $id);
> > > >                 $fields[] = 'SUM(`Hour`.`time`)';
> > > >                 $result = $this->find($conditions, $fields);
>
> > > >                 return $result['Project']['SUM(`Hour`.`time`)'];
> > > >         }
> > > > ====
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to