Как сделать сортировку, фильтр и подстановку из связанной таблицы через таблицу?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Как сделать сортировку, фильтр и подстановку из связанной таблицы через таблицу?

Сообщение Grazio »

Всем доброго времени!

Помогите плз сделать сортировку и фильтр в gridview для столбца одного, чё-то не соображу.
У меня таблица нормально сортирует и фильтрует по связанным, а тут связь через таблицу.
То есть:
В моей таблице, для которой я делаю gridview, есть некий param_id.
Во второй таблице он является id-шником. В этой второй таблице есть свой столбец param2_id, который является id-шником в третьей таблице. Вот из третьей таблицы мне нужно вытащить поле name в мою таблицу. :roll:
Чтобы фильтровалось, сортировалось, и значения полей из третьей таблицы были вместо циферок.

Спасибо =]
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Как сделать сортировку, фильтр и подстановку из связанной таблицы через таблицу?

Сообщение yiijeka »

У вас как я понял вот такое https://github.com/githubjeka/tracker-i ... hp#L92-L96

Вот пример как делается фильтр - https://github.com/githubjeka/tracker-i ... #L153-L156, сортировка устанавливается через attributes в sort DataProvider, там есть код тоже.
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как сделать сортировку, фильтр и подстановку из связанной таблицы через таблицу?

Сообщение Grazio »

Спасибо за ответ.

Попробовал так сделать, но столкнулся с MySQL ошибкой Not unique table/alias,
потому что вторая таблица уже соединена с ещё одной таблицей (не описал это сразу, не думал, что будут проблемы):
Изображение
table1 и table2 уже связаны так:

Код: Выделить всё

		$query->joinWith(['table2' => function ($q) {
			$q->where('table2.name LIKE "%' . $this->table2Name . '%"');
		}]);
Так я для gridview вытаскиваю названия из table2 по айдишникам из table1. Всё работает.

Соответственно,

Код: Выделить всё

	public function getTable3s()
	{
		return $this->hasOne(Table3s::className(), ['id' => 'ext_id'])
			->viaTable('{{%table2}}', ['id' => 'param_id1']);
	}
этот код вызывает ошибку, т.к. при попытке подконнектить table3 через table2 он понимает, что связь с table2 уже есть и она будет дублироваться.

Как быть? :?:
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как сделать сортировку, фильтр и подстановку из связанной таблицы через таблицу?

Сообщение Grazio »

А, ну да, логично.
заменить

Код: Выделить всё

$query->joinWith(['table2' => function ($q) {
			$q->where('table2.name LIKE "%' . $this->table2Name . '%"');
		}]);
на просто выборку без джоинов, т.к. таблица уже джоинится там, при работе с третьей таблицей через viatable.

Код: Выделить всё

$query->andwhere('table2.name LIKE "%' . $this->table2Name . '%"');
Спасибо, разрулил )
Ответить