usdglander
@usdglander
Yipee-ki-yay

Как заставить работать юнион в Yii2 в ActiveDataProvider?

Добрый день. Имею ситуацию, когда в GridView надо грузить данные из двух таблиц. Часовое курение мануалов дало мне возможность написать вот это:
public static function getLeadQuestionProvider($pageSize = 20) 
	{
		$leadQuery = (new \yii\db\Query())
			->select("id AS id, ".LeadQuestion::tableName().".city_id AS city_id, text AS text, link AS link, source AS source, created AS created")
			->from(LeadQuestion::tableName())
			->innerJoin(City::tableName(), City::tableName().'.city_id = '.LeadQuestion::tableName().'.city_id')
			->where(['NOT IN', City::tableName().'.region_id', [3468, 4312, 3563]]);
		
		$questionQuery = (new \yii\db\Query())
			->select("CONCAT('0') AS id, ".Questions::tableName().".city_id AS city_id, text AS text, ".Address::tableName().".phone AS link, CONCAT('LD') AS source, create_date AS created")
			->from(Questions::tableName())
			->innerJoin(Address::tableName(), Address::tableName().'.id = '.Questions::tableName().'.address_id')
			->innerJoin(City::tableName(), City::tableName().'.city_id = '.Questions::tableName().'.city_id')
			->where(['NOT IN', City::tableName().'.region_id', [3468, 4312, 3563]]);
		
		$query = (new \yii\db\Query())
			->from(['scraper' => $leadQuery->union($questionQuery)]);
		
		return new ActiveDataProvider([
			'query' => $query,
			'pagination' => [
				'pageSize' => $pageSize
			]
		]);
	}

Однако как я понял $query возвращает массив, а GridView ждёт объект и возможность дописывать этот запрос своими offset, limit и ордерБаями. В итоге не работает. :( ЧЯДНТ?
  • Вопрос задан
  • 2382 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А не проще сделать связи в моделях через которые подтягивать данные?

Читали это: www.yiiframework.com/wiki/621/filter-sort-by-calculated - очень интересная статья с примерами по теме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы