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

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

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

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

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

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

             Active Record](/doc/guide/ru/database.ar).
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();