Ответы пользователя по тегу Yii
  • Трудности с ActiveRecord -> relations?

    @salopot Автор вопроса
    Организовал settlementCount так:

    class Country extends CActiveRecord
    {
    
    	public function relations()
    	{
    		// NOTE: you may need to adjust the relation name and the related
    		// class name for the relations automatically generated below.
    		return array(
                'areas' => array(self::HAS_MANY, 'Area', 'id_country'),
    
                'settlementCount'=>array(self::STAT, 'Area', 'id_country',
                    'join' => 'INNER JOIN `Settlement` ON `Settlement`.id_area = `t`.id',
                ),
    
                'settlements'=>array(self::HAS_MANY, 'Settlement', array('id'=>'id_area'), 'through'=>'areas'),
    ...
    

    Хотя какой-то осадок неверности решения остался…
    Ответ написан
    Комментировать
  • Трудности с ActiveRecord -> relations?

    @salopot Автор вопроса
    Частично отвечу сам себе на вопрос 2.1:
    Совсем недавно вышел Yii 1.1.14 RC в котором заявлена поддержка BELONGS_TO для опции through и действительно тесты показали что для Area можно установить отношение так:
    public function relations()
    	{
                'settlement' => array(self::BELONGS_TO, 'Settlement', 'id_settlement'), 
                'area' => array(self::BELONGS_TO, 'Area', array('id_area'=>'id'), 'through'=>'settlement'),
                //'country' => array(self::BELONGS_TO, 'Country', array('id_country'=>'id'), 'through'=>'area'),
            }
    }
    

    Relation для Area нормально отрабатывает с Message::model()->with(array('settlement', 'area'))->…

    Установка relation для country через area не сработала, тобиж цепочки вызовов не поддерживаются…
    Да и не всегда нужна тот самый промежуточный relation хотя погоды он конечно не сыграет.

    Вообще если задуматься, то необходимые мне отношения больше похожи на MANY_MANY, только вот ссылается не сама промежуточная таблица, а на нее.
    Возможно многоуважаемый SamDark немного прояснит ситуюацию.
    Ответ написан
    Комментировать