/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Artist::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $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; } $query->andFilterWhere(['id' => $this->id, 'user_id' => $this->user_id]); // $query->andFilterWhere(['like', 'original_name', $this->original_name]) // ->andFilterWhere(['like', 'latin_name', $this->latin_name]); $query->andWhere('original_name LIKE :original_name OR latin_name LIKE :latin_name')->addParams([':original_name' => "%{$this->original_name}%", ':latin_name' => "%{$this->latin_name}%"]); if (Utils::get('tags', $params)) { $query->leftJoin('artist_tag', 'artist_tag.artist_id = artist.id'); if (Utils::get('tags_mode', $params)) { # all tags $tags = explode(',', $params['tags']); foreach ($tags as $k => $v) { $tags[$k] = (int) $v; } $tags_count = count($tags); $tags = implode(',', $tags); $query->andWhere("(\n SELECT count(*)\n FROM artist_tag\n WHERE artist_tag.artist_id = artist.id\n AND artist_tag.tag_id IN ({$tags})\n ) = {$tags_count}"); } else { # any tag $query->andWhere(['in', 'artist_tag.tag_id', explode(',', $params['tags'])]); } } return $dataProvider; }
public function testGet() { $array = ['artist' => 'Red Velvet', 'name' => 'Ice Cream Cake', 'date' => '2015-03-17']; $this->assertEquals('Ice Cream Cake', Utils::get('name', $array)); $this->assertNull(Utils::get('genre', $array)); }