YiiConf 2017 всё ближе! Не забудьте купить билет.
Yii 1.1.9

Вышла стабильная версия Yii 1.1.9. В данном релизе около 60 улучшений и исправленных ошибок.

Полный список изменений можно посмотреть в соответствующем файле. Перед обновлением с более ранних версий важно ознакомиться с инструкциями.

Русскоязычная документация, как обычно, находится в полностью актуальном состоянии. Кроме того, поправлены все найденные на момент релиза опечатки. Спасибо всем, кто использует Orphus на yiiframework.ru.

Рассмотрим наиболее интересные изменения.

Более удобный способ определения through в отношениях ActiveRecord

Опция though была добавлена в версии 1.1.7, но синтаксис был не слишком удобен, так что было решено сделать его более явным. В текущей версии используется следующий синтаксис:

[php]
'comments'=>array(self::HAS_MANY,'Comment',array('key1'=>'key2'),'through'=>'posts'),

В приведённом выше array('key1'=>'key2'):

through можно использовать как для HAS_ONE, так и для HAS_MANY.

Подробнее данная возможность описана в разделе Реляционная Active Record полного руководства.

Поддержка групп условий в Model::relations()

Теперь можно использовать группы условий при определении отношений модели:

[php]
'recentApprovedComments'=>array(self::BELONGS_TO, 'Post', 'post_id', 
    'scopes' => array('approved', 'recent')),

При использовании лишь одной группы условий её можно указать как строку.

Возможность сделать JOIN между моделями по заданным ключам

В данной версии стало возможым создание отношений по заданной паре PK->FK не опираясь на схему данных. Это означает, что можно, например, задать следующее отношение для модели Day:

[php]
'jobs'=>array(self::HAS_MANY, 'Job', array('date' => 'target_date')),

В данном случае Day может содержать несколько Jobов. При этом они не связаны привычным образом. Мы задали ключ в виде array('fk'=>'pk'), то есть на выходе мы получим SQL вроде

SELECT * FROM day t
JOIN job ON t.date = job.target_date

Возможность перекрыть классы ядра при помощи Yii::$classMap

Начиная с 1.1.5 в Yii была возможность заранее импортировать классы и использовать их без явного импорта или include. Теперь используя тот же самый подход можно перекрыть классы ядра.