/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Books::find()->joinWith(['authors' => function (Query $query) { $query->from(Authors::tableName() . ' authors'); }]); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query]); $dataProvider->sort->attributes['authors.fullname'] = ['asc' => ['authors.firstname' => SORT_ASC, 'authors.lastname' => SORT_ASC], 'desc' => ['authors.firstname' => SORT_DESC, 'authors.lastname' => SORT_DESC]]; $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['id' => $this->id, 'date_create' => $this->date_create, 'date_update' => $this->date_update, 'date' => $this->date, 'author_id' => $this->author_id]); $query->andFilterWhere(['like', 'name', $this->name])->andFilterWhere(['like', 'preview', $this->preview])->andFilterWhere(['and', ['like', 'authors.firstname', $this->getAttribute('authors.fullname')], ['like', 'authors.lastname', $this->getAttribute('authors.fullname')]]); if (!is_null($this->from_date) && !is_null($this->to_date)) { $query->andFilterWhere(['between', 'date', date('Y-m-d', strtotime($this->from_date)), date('Y-m-d', strtotime($this->to_date))]); } return $dataProvider; }
/** * get Authors array for select box and other * @return array */ public function getAuthors() { return ArrayHelper::map(Authors::find()->addSelect([Authors::tableName() . ".*", "CONCAT(firstname, ' ', lastname) AS author_fullname"])->all(), 'id', 'author_fullname'); }
public function down() { Yii::$app->db->createCommand()->delete(Authors::tableName())->execute(); }