Есть поведение:
https://github.com/OmgDef/yii2-multilingual-behavior
Для интернационализации. Напрочь выключило логику мне. Не могу serchModel сделать. Для стандартного gridView дописать стандартный SearchModel.
Вот в обычной модели подключено поведение:
public function behaviors()
{
return [
'ml' => [
'class' => MultilingualBehavior::className(),
'languages' => [
'ru' => 'ru',
'en-US' => 'en',
'fr' => 'fr',
],
'defaultLanguage' => 'en',
'langForeignKey' => 'courses_cat_id',
'tableName' => "{{%courses_cat_lang}}",
'attributes' => [
'title', 'desc',
]
],
];
}
Там же связи добавил, така как через поведение хз как сделать:
public function getFr(){
return $this->hasOne(CoursesCatLang::className(),['courses_cat_id'=>'id'])->andWhere(['language'=>'fr']);
}
public function getRu(){
return $this->hasOne(CoursesCatLang::className(),['courses_cat_id'=>'id'])->andWhere(['language'=>'ru']);
}
public function getEn(){
return $this->hasOne(CoursesCatLang::className(),['courses_cat_id'=>'id'])->andWhere(['language'=>'en']);
}
Вот search, как я его видел:
public function search($params)
{
$query = CoursesCat::find();
$query->joinWith([
'fr' => function ($q) {
$q->from(['fr' => 'courses_cat_lang']);
},
]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere(['like', 'en.title', $this->title])
->andFilterWhere(['like', 'ru.title', $this->title_ru])
->andFilterWhere(['like', 'fr.title', $this->title_fr])
return $dataProvider;
}
C fr.title все норм работает, не могу понять как добавить другие связи.
пробовал так:
$query->joinWith([
'fr' => function ($q) {
$q->from(['fr' => 'courses_cat_lang']);
},
])->joinWith([
'ru' => function ($q) {
$q->from(['ru' => 'courses_cat_lang']);
},
]);
получаю:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'language' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `courses_cat` LEFT JOIN `courses_cat_lang` `fr` ON `courses_cat`.`id` = `fr`.`courses_cat_id` LEFT JOIN `courses_cat_lang` `ru` ON `courses_cat`.`id` = `ru`.`courses_cat_id` WHERE (`language`='fr') AND (`language`='ru')