Состояние модельных отношений - PullRequest
0 голосов
/ 08 марта 2012

У меня возникли некоторые проблемы после разработки сеанса в yii - точнее, у меня есть вопрос, касающийся определения отношений в модели.

Мне кажется, я понимаю теорию - и я реализовал этот подвиг.в прошлом после некоторых неприятностей.Я нигде не читал документы, так как считаю, что этот конкретный вопрос плохо документирован, из-за его простоты

Предположим, многоязычный сайт с 3 таблицами, например.Общий [1] - [n] Перевод [n] - [1] Язык.

Более конкретный пример - представьте систему статей.Shared содержит данные, которые не зависят от языка (дата / время опубликованы, ссылки на изображения и т. Д.) - переведены (фактическая статья на одном языке) - Language (хранятся ссылки на разные языки)

Я могу получитьтекущее состояние языка из URL с использованием $ _GET ['language'];

Я хочу, чтобы сайт игнорировал все данные на других языках, кроме текущего выбранного языка.Что я конкретно не хочу делать, так это метод, который я сейчас использую, добавляя условия в CDbCriteria для поиска или в CActiveDataprovided для индекса.

Я хочу указать один раз, хорошо один раз длякаждая модель по простому правилу игнорирует все на других языках.

Теперь, в прошлом, я мог указать это в функции отношений соответствующих моделей.В основном я хочу, чтобы что-то вроде этого работало:

class ArticleData extends CActiveRecord{
...
    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('title, data', 'required'),
        array('language, source', 'length', 'max'=>10),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('id, title, data, language, source', 'safe', 'on'=>'search'),
    );
}
enter code here
    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(
        'article' => array(self::HAS_ONE, 'Article', 'source'),
        'articlelanguage' => array(self::HAS_ONE, 'Language', 'code','condition' =>  'articlelanguage.code ='. $_GET['language']),
    );
}

и

class Language extends CActiveRecord{
...
    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('code', 'length', 'max'=>10),
        array('language', 'length', 'max'=>100),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('code, language', 'safe', 'on'=>'search'),
    );
}

...
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(
        'articledata' => array(self::HAS_MANY, 'ArticleData', 'language'),

    );
}

Итак, вопрос двоякий - в отношении последней строки в отношениях первых моделей:

 'articlelanguage' => array(self::HAS_ONE, 'Language', 'code','condition' =>  'articlelanguage.code ='. $_GET['language']),

1) Будет ли эта строка выполнять то, что я хочу?

2) Если да, что я делаю не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...