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