цикличность relations

Всем хай

Есть у меня модель категорий. Дерево вида id->idParent


class Cats extends CActiveRecord

	{

	    public static function model($className=__CLASS__)

	    {

	        return parent::model($className);

	    }

	        

	    public function relations()

	    {

	        return array(            

	        	'info' 	=> array(self::HAS_ONE, 'Content', "idIndex"),

	        	'child' => array(self::HAS_MANY, 'Cats', "idParent"),

	        );

	    }

	    

		public function tableName()

		{

			return 'index';

		}

	}

Как понятно child идет связка на самом себе что б достать детей. А info - связка с таблицей для получения информации по узлу (название, url и тп).

Проблемы в работе такой системы нету. Все работает, все отлично.

Одно единственное НО оно достает мне детей не ограниченной вложенности пока они существуют. Т.е. написав:


Cats::model()->with('child', 'info')->together()->findByPk(1);

я получу всех детей раздела 1. у всех этих детей получу их детей. у тех самых детей тоже их детей получу и так до посинения пока не дойдет до последнего узла. это конечно клёво, но всё таки весьма ресурсоемко.

поэтому прошу помощи, как можно ограничить кол-во вложенности до 2х к примеру? Что б достало 1 узел и его детей, у этих детей достало их детей и все.

Я думаю, без переопределения методов АР - никак :(

Возможно стоит работу с деревьями реализовать как behaviours. Тут на форуме был такой топик…

Возможно можно попробовать сделать behaviour с методом


function getChild($n = 1)

{

//children go here

}

Не уверен, что будет работать через $cats->child. В теории должно, потому что контроллер вызывает метод getChild, а он ищется в подклчаемом поведении. В худшем случае придется вызывать getChild() напрямую.

Тут только засада такая что надо будет для каждого вызывать, а когда все вместе - то идет одним запросом все…

Пасиба.

Ага, я тоже думал про behaviours сначало, но потом подумал может есть какой то встроенный счетчик в Yii о котором я незнаю :) блин, значит без велосипеда тут не как :)