I didnt really understand what you really want, but it seems that it´s a 
work for TreeBehavior

In TreeBehavior you have id, parent_id, lft and rght fields... lft and rght 
are automatically filled by the behavior... The parent_id is the ID of the 
parent object, them you can use $this->Model->find('threaded'); will return 
the structure with it´s children.

array(
    [0]=>array(
        'Model'=>array(
            [id]=>5,
            [parent_id]=>1,
            [something]=>'somevalue',
            [children]=>array(
                [0]=>array(
                    'Model'=>array(
                        [id]=>6,
                        [parent_id]=>5,
                        [something]=>'somevalue'
                    )
                )
            )
        )
    )
)

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