Thank you grigri. That helped me a lot. I've managed to produce the
data I need.

For anyone looking at this later, my paginateCount function above will
not work. You cannot find('count') while using the 'group' parameter
apparently.

Martin.

On Dec 9, 11:47 am, grigri <[EMAIL PROTECTED]> wrote:
> The _easiest_ way would be a basic Set::combine() call:
>
> $results = Set::combine($results, '{n}.Accomodation.id', '{n}',
> '{n}.Course.id');
>
> This won't get the results in the exact format you want, but it's
> workable:
>
> // view code
> foreach($results as $resultSet) {
>   $course = reset($resultSet);
>   echo '<dl>';
>   echo '<dt>Course</dt><dd>'.$course['Course']['name'].'</dd>';
>   echo '<dt>School</dt><dd>'.$course['School']['name'].'</dd>';
>   echo '</dl>';
>   echo '<ul>';
>   foreach($resultSet['Accommodation'] as $row) {
>     echo '<li>' . $row['name'] . '</li>';
>   }
>   echo '</ul>';
>
> }
>
> I don't think there's a one-liner that will massage the data into the
> format you want; it should be easy with a few for loops though - just
> a bit ugly.
>
> hth
> grigri
>
> On Dec 9, 1:09 am, martinp <[EMAIL PROTECTED]> wrote:
>
> > Thanks Joel. That article is certainly interesting. Debuggable.com has
> > lots of useful CakePHP insights and I wasn't aware of that post.
>
> > However, it doesn't solve my problem. In the Debuggable example they
> > don't do anything with the Category information, whereas I need to
> > find and use my Accommodation information, preferably stored as above.
> > So if anyone's got any tips......
>
> > On Dec 9, 12:57 am, Joel Perras <[EMAIL PROTECTED]> wrote:
>
> > >http://debuggable.com/posts/how-to-paginate-a-search-using-the-cakeph...
>
> > > -J.
>
> > > On Dec 8, 3:45 pm, martinp <[EMAIL PROTECTED]> wrote:
>
> > > > Hello
>
> > > > I'd be grateful for any advice on the best way to do this. (Cake 1.2
> > > > RC3)
>
> > > > I have a model Course, which BelongsTo School, which hasMany
> > > > Accommodation.
> > > > I want to be able to filter by courses, types of school and types of
> > > > accommodation.
>
> > > > The results also need to be paginated.
>
> > > > I've set up my model binding like this:
> > > >                 $this->Course->bindModel(
> > > >                         array(
> > > >                                 'belongsTo' => array(
> > > >                                         'School' => array(
> > > >                                                 'className' => 
> > > > 'Schools.School',
> > > >                                                 'foreignKey' => 
> > > > 'school_id'
> > > >                                         )
> > > >                                 ),
> > > >                                 'hasOne' => array(
> > > >                                         'Accommodation' => array(
> > > >                                                 'className' => 
> > > > 'Schools.Accommodation',
> > > >                                                 'foreignKey' => false,
> > > >                                                 'conditions' => 
> > > > array('Accommodation.school_id =
> > > > Course.school_id')
> > > >                                         )
> > > >                                 )
> > > >                         ), false
> > > >                 );
>
> > > > The Course hasOne Accommodation rather than the School hasMany
> > > > Accommodation to ensure that my accommodation results are returned and
> > > > can be searched on.
>
> > > > When I paginate I get a row for each accommodation as well as each
> > > > course, i.e.:
>
> > > >          [rows] => Array
> > > >                 (
> > > >                     [0] => Array
> > > >                         (
> > > >                             [Course] => Array
> > > >                                 (
> > > >                                     [id] => 44
> > > >                                     [name] => Test course
> > > >                                     [school_id] => 4
> > > >                                 )
>
> > > >                             [School] => Array
> > > >                                 (
> > > >                                     [id] => 4
> > > >                                     [name] => Test School
> > > >                                 )
>
> > > >                             [Accommodation] => Array
> > > >                                 (
> > > >                                     [id] => 6
> > > >                                     [school_id] => 4
> > > >                                     [name] => Test Accommodation
> > > >                                 )
>
> > > >                         )
>
> > > >                     [1] => Array
> > > >                         (
> > > >                             [Course] => Array
> > > >                                 (
> > > >                                     [id] => 44
> > > >                                     [name] => Test course
> > > >                                     [school_id] => 4
>
> > > >                                 )
>
> > > >                             [School] => Array
> > > >                                 (
> > > >                                     [id] => 4
> > > >                                     [name] => Test School
> > > >                                 )
>
> > > >                             [Accommodation] => Array
> > > >                                 (
> > > >                                     [id] => 7
> > > >                                     [school_id] => 4
> > > >                                     [name] => Test Accommodation 2
> > > >                                 )
>
> > > >                         )
> > > >                                 )
>
> > > > What I'm looking to get is results 'grouped' by course, while still
> > > > being able to filter by Accommodation field, e.g.:
>
> > > >                 [rows] => Array
> > > >                         (
> > > >                                 [0] => Array
> > > >                                         (
> > > >                                                 [Course] => Array(...)
> > > >                                                 [School] => Array(...)
> > > >                                                 [Accommodation] => Array
> > > >                                                         (
> > > >                                                                 [0] => 
> > > > Array(...)
> > > >                                                                 [1] => 
> > > > Array(...)
> > > >                                                         )
> > > >                                         )
> > > >                         )
>
> > > > What's the best way to achieve this? Create a custom pagination query
> > > > and then somehow manipulate the resulting results array?
>
> > > > This is what I've added to my Course model so far:
>
> > > > function paginate($conditions, $fields, $order, $limit, $page = 1,
> > > > $recursive = null, $extra = array()) {
> > > >         $results = $this->find('all', array('conditions' => $conditions,
> > > > 'fields' => $fields, 'order' => $order, 'limit' => $limit, 'page' =>
> > > > $page, 'recursive' => $recursive));
> > > >         // Would need to refactor the Array here
> > > >         return $results;
>
> > > > }
>
> > > > And the following paginateCount function that uses the group parameter
> > > > to only retrieve the correct number of results.
>
> > > > function paginateCount($conditions = null, $recursive = 0, $extra =
> > > > array()) {
> > > >         return $this->find('count', array('conditions' => $conditions,
> > > > 'recursive' => $recursive, 'group' => 'Course.id'));
>
> > > > }
>
> > > > Can anyone advise me if I'm on the right track and the best way to
> > > > achieve the results I want? Is there a function in the Set class that
> > > > can do this?
>
> > > > Many thanks
> > > > Martin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" 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