Вышла стабильная версия 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')
:
key1
является ключом, определённым в отношении, котрое указано вthrough
(в нашем случае этоposts
).key2
является ключом, определённым в модели, на которую указывает отношение (в нашем случае этоComment
).
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
. Теперь используя тот же самый подход можно перекрыть классы ядра.