выборка из другой таблицы по связям

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

выборка из другой таблицы по связям

Сообщение Alert230 »

Всем добра!
Есть 2 таблицы:

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

price:
- id
- kontragent_id
- kultura_id
- price

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

link:
- price_id
- otchet_id
Тут всё очевидно. Всё на active record моделях.
Мне нужно сформировать выборку из price по kontragent_id и kultura_id , записи которых есть в link.price_id
Мой вопрос: можно сделать эту выборку в 1 простой запрос?

PS: пока что сделал в 2 запроса: 1) запрашиваем все link.price_id, 2) запрашиваем всё из price где id встречается в массиве из п.1
Может быть есть более изящное решение? Дело в том, что запрос select * выполняется непозволительно долго (кеширования нет)
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: выборка из другой таблицы по связям

Сообщение Alexum »

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

$prices = Price::find()
->innerJoinWith('link',false)
->where(['kontragent_id' =>$model->kontragent_id, 'kultura_id' =>$model->kultura_id])
->all();
Последний раз редактировалось Alexum 2018.06.06, 09:43, всего редактировалось 1 раз.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: выборка из другой таблицы по связям

Сообщение Nex-Otaku »

Изучай джойны.

Выбираем все "price", для которых есть "link":

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

select price.* from price
inner join link on link.price_id=price.id
group by price.id
Если медленно выполняется - скорее всего индексов нехватает, выполняй EXPLAIN для запроса, разбирайся как ставить индексы.
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

Re: выборка из другой таблицы по связям

Сообщение Alert230 »

Большое спасибо, реализовал.
Ответить