Maybe, what you want is to use the TreeBehavior with hasAndBelongsToMany, 
isnt it?

Em quinta-feira, 23 de maio de 2013 02h54min48s UTC-3, DJ escreveu:
>
> Hi
>
> I am trying to set up a generic data structure that we can use to map 
> objects, attributes and relationships. As such I have one table with a id 
> and name, and a join table with a "parent" id and a "child" id.
>
> Data...
>
> mysql> select * from resources;
> +----+-------+
> | id | name  |
> +----+-------+
> |  1 | top   |
> |  2 | 2nd_1 |
> |  3 | 3rd_1 |
> |  4 | 2nd_2 |
> |  5 | 3rd_2 |
> |  6 | 4th   |
> |  7 | 5th   |
> +----+-------+
>
> mysql> select * from resources_resources;
> +----+---------------+---------------+
> | id | a_resource_id | b_resource_id |
> +----+---------------+---------------+
> |  1 | 1             | 2             |
> |  2 | 2             | 3             |
> |  3 | 1             | 4             |
> |  4 | 4             | 5             |
> |  5 | 3             | 6             |
> |  6 | 5             | 6             |
> |  7 | 6             | 7             |
> +----+---------------+---------------+
>
>
> Below is my model definition.
>
> // Model/Resource.php
>
>         public $hasAndBelongsToMany = array(
>                 'Children' => array(
>                         'className' => 'Resource',
>                         'joinTable' => 'resources_resources',
>                         'foreignKey' => 'a_resource_id',
>                         'associationForeignKey' => 'b_resource_id',
>                         'unique' => 'keepExisting',
>                         'conditions' => '',
>                         'fields' => '',
>                         'order' => '',
>                         'limit' => '',
>                         'offset' => '',
>                         'finderQuery' => '',
>                         'deleteQuery' => '',
>                         'insertQuery' => ''
>                 ),
>         );
>
> Controller
>
> // Controller/ResourceController.php
>
>         public function view($id = null) {
>                 if (!$this->Resource->exists($id)) {
>                         throw new NotFoundException(__('Invalid 
> resource'));
>                 }
>                 $options = array('conditions' => array('Resource.' . 
> $this->Resource->primaryKey => $id),'recursive' => 5);
>                 $data = $this->Resource->find('first', $options);
>                 debug($data);
>
> This outputs as below...
>
> array(
>       'Resource' => array(
>               'id' => '1',
>               'name' => 'top'
>       ),
>       'Children' => array(
>               (int) 0 => array(
>                       'id' => '2',
>                       'name' => '2nd_1',
>                       (int) 0 => array(
>                               'id' => '3',
>                               'name' => '3rd_1',
>                               'ResourcesResource' => array(
>                                       'id' => '2',
>                                       'a_resource_id' => '2',
>                                       'b_resource_id' => '3'
>                               )
>                       ),
>                       'ResourcesResource' => array(
>                               'id' => '1',
>                               'a_resource_id' => '1',
>                               'b_resource_id' => '2'
>                       )
>               ),
>               (int) 1 => array(
>                       'id' => '4',
>                       'name' => '2nd_2',
>                       (int) 0 => array(
>                               'id' => '5',
>                               'name' => '3rd_2',
>                               'ResourcesResource' => array(
>                                       'id' => '4',
>                                       'a_resource_id' => '4',
>                                       'b_resource_id' => '5'
>                               )
>                       ),
>                       'ResourcesResource' => array(
>                               'id' => '3',
>                               'a_resource_id' => '1',
>                               'b_resource_id' => '4'
>                       )
>               )
>       )
> )
>
>
> Is it because I'm using the one table? (I'm about to prove that for 
> myself). I have tried things like using contain and specifying multiple 
> levels as below with same result as below. 
>
> $options = array('conditions' => array('Resource.' . 
> $this->Resource->primaryKey => $id),'contain' => array( 'Children' => 
> array( 'Children' => array ( 'Children'))));
>
> Is this 2 levels deep recursion by design? Can anybody suggest a 
> workaround?
>
> Thanks!
>
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to