Состояние модельных отношений
У меня возникли некоторые проблемы после разработки сессии в yii - точнее, у меня есть вопрос, касающийся определения отношений в модели.
Я предполагаю, что понимаю теорию - и я реализовал этот подвиг. в прошлом после некоторых неприятностей. Я нигде не читал документы, так как этот конкретный вопрос плохо документирован из-за его простоты.
Предположим, многоязычный сайт с 3 таблицами, например. Общий [1]-[п] Перевод [п]-[1] Язык.
Более конкретный пример - представьте систему статей. Shared содержит используемые данные, которые не зависят от языка (дата / время опубликованы, ссылки на изображения и т. Д.) - Translated (фактическая статья, на одном языке) - 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) Если да, что я делаю не так