/** * @param array $params Search conditions. * @return ActiveDataProvider */ public function search($params) { $translateLanguage = Yii::$app->request->get('language_id', Yii::$app->sourceLanguage); $sourceLanguage = $this->_getSourceLanguage(); $query = LanguageSource::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $dataProvider->setSort(['attributes' => ['id', 'category', 'message', 'translation' => ['asc' => ['lt.translation' => SORT_ASC], 'desc' => ['lt.translation' => SORT_DESC], 'label' => Yii::t('language', 'Translation')]]]); if (!($this->load($params) && $this->validate())) { $query->joinWith(['languageTranslate' => function ($query) use($translateLanguage) { $query->from(['lt' => LanguageTranslate::tableName()])->onCondition(['lt.language' => $translateLanguage]); }]); $query->joinWith(['languageTranslateByLanguage' => function ($query) use($sourceLanguage) { $query->from(['ts' => LanguageTranslate::tableName()])->onCondition(['ts.language' => $sourceLanguage]); }]); return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'category' => $this->category]); $query->andFilterWhere(['or', $this->createLikeExpression('message', $this->message), $this->createLikeExpression('ts.translation', $this->message)]); $query->joinWith(['languageTranslate' => function ($query) use($translateLanguage) { $query->from(['lt' => LanguageTranslate::tableName()])->onCondition(['lt.language' => $translateLanguage])->andFilterWhere($this->createLikeExpression('lt.translation', $this->translation)); }]); $query->joinWith(['languageTranslateByLanguage' => function ($query) use($sourceLanguage) { $query->from(['ts' => LanguageTranslate::tableName()])->onCondition(['ts.language' => $sourceLanguage]); }]); return $dataProvider; }
/** * @return \yii\db\ActiveQuery */ public function getLanguageSources() { return $this->hasMany(LanguageSource::className(), ['id' => 'id'])->viaTable(LanguageTranslate::tableName(), ['language' => 'language_id']); }