Relations внутри одной таблицы/модели

Есть таблица, в которой хранятся рубрик/подрубрики/подподрубрики и т.д.

Поля id, pid (здесь ид родителя), title (заголовок рубрики)

С помощью реляционной AR вышло очень просто получать всех детей текущей модели


public function relations()

		return array(

			'childs' => array(self::HAS_MANY,'GisRubrics','pid'),

Все дети элемента получаются в контроллере простым действием


$childs = $model->childs;

А вот с родителем все никак не получается.

Пробовал


'parent' => array(self::BELONGS_TO,'GisRubrics','id'),

Не работает. Как бы сделать, чтобы родителя можно было получить так:


$parent = $model->parent;

???

‘parent’ => array(self::BELONGS_TO,‘GisRubrics’,‘pid’),

но учти, что parent вернется только запись предыдущего уровня (т.е. иерархии не совсем данный метод подходит),

у меня по такому же принципу реализована табличка

		'childs' => array(self::HAS_MANY, 'Routes', 'parent_id', 'together'=>true),


		'parents' => array(self::BELONGS_TO, 'Routes', 'parent_id',),

Не работает, возвращает NULL

Что-то странно, смотри как я у себя воспроизвел:


CREATE TABLE `GisRubrics` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `pid` int(11) NOT NULL DEFAULT '0',

  `title` varchar(50) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


-- ----------------------------

-- Records of GisRubrics

-- ----------------------------

INSERT INTO `GisRubrics` VALUES ('1', '0', 'Новости');

INSERT INTO `GisRubrics` VALUES ('2', '1', 'Авто');

INSERT INTO `GisRubrics` VALUES ('3', '0', 'Статьи');

INSERT INTO `GisRubrics` VALUES ('4', '1', 'Происшествия');

Модель:




	public function relations()

	{

		return array(

                    'childs'=>array(self::HAS_MANY, get_class($this), 'pid'),

                    'parent'=>array(self::BELONGS_TO, get_class($this), 'pid'),

		);

	}



Контроллер:




class GisController extends Controller {


    public function actionIndex()

    {

        $rows = GisRubrics::model()->with(array('childs', 'parent'))->findAll();

        

        foreach ($rows as $k => $row)

        {

            if($row->parent)

                echo $row->title.' / '.$row->parent->title.'<br/>';

            else

                echo '<b>'.$row->title.'</b><br/>';

        }

    }

}



на выходе:

Да спасибо, все заработало. Чуть голову не сломал себе, а оказалось что базу данных неправильно заполнил (pid не ссылался на правильного родителя). Спасибо!

Рад помочь!