Yii Framework Forum: цикличность relations - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

цикличность relations Rate Topic: -----

#1 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 07 October 2009 - 05:37 AM

Всем хай

Есть у меня модель категорий. Дерево вида 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 узел и его детей, у этих детей достало их детей и все.
0

#2 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 07 October 2009 - 01:06 PM

Я думаю, без переопределения методов АР - никак :(
Возможно стоит работу с деревьями реализовать как behaviours. Тут на форуме был такой топик...
Возможно можно попробовать сделать behaviour с методом
function getChild($n = 1)
{
//children go here
}

Не уверен, что будет работать через $cats->child. В теории должно, потому что контроллер вызывает метод getChild, а он ищется в подклчаемом поведении. В худшем случае придется вызывать getChild() напрямую.
Тут только засада такая что надо будет для каждого вызывать, а когда все вместе - то идет одним запросом все...
Posted Image
My Blog: http://programmersnotes.info/ - tips, design patterns, client and server-side coding, yii articles and simply my experience.

Follow me on twitter: http://twitter.com/KonstantinMirin
Add me to your friends on facebook: http://www.facebook....hp?id=784832902
0

#3 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 07 October 2009 - 04:35 PM

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

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users