Thanks Andre

Unfortunately tree behaviour doesn't really work for my situation as I need 
the ability for a node/resource/object to have multiple parents.

I believe the problem is related to using the one model. For eample if I 
set up a data model like Country->State->City->Suburb->Street with join 
tables the recursion works fine.

On Saturday, May 25, 2013 5:52:30 AM UTC+10, André Luis wrote:
>
> 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