Последняя стабильная версия: 1.1.9

Рецепты

Система Orphus

Мультиязычные модели

Довольно часто возникает необходимость работать с содержимым проекта на нескольких языках. В Yii при использовании Active Record это можно реализовать очень красиво.

Для этого добавим к таблице модели поле для хранения двухсимвольного идентификатора языка записи lang типа char(2).

Далее в модели зададим условие по умолчанию и реализуем именованное условие lang.

Подсказка: Подробнее об именованных условиях можно прочитать в руководстве по Active Record.

class Post extends CActiveRecord {
    // параметры, применяемые по умолчанию
    public function defaultScope() {
        return array(
            'condition' => "lang='".Yii::app()->language."'",
        );
    }
 
    // именованное условие с параметром
    public function lang($lang){
        $this->getDbCriteria()->mergeWith(array(
            'condition' => "lang='$lang'",
        ));
        return $this;
    }
}

После этого, можно использовать следующий код:

// выбираем все записи с языком, установленным в данный момент в приложении
$posts = Post::model()->findAll();
// выбираем все записи на английском
$posts = Post::model()->lang('en')->findAll();