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.