Antony
И просто получай одним запросом все в массив.
who are you
вот оно
who are you
http://shot.hsdn.org/TqMowuCH
andrew
PriceExample::find()->joinWith('priceFeatures')->all() ?
who are you
нет , без joinWith
who are you
ой
andrew
почему
who are you
ща попробую )
andrew
какая задача?
andrew
это жадная загрузка
andrew
через joinWith
andrew
просто with это не жадная
who are you
опачки, спасибо милый человек теперь запрос один
SELECT * FROM price_features WHERE id IN (22, 23, 24, 25, 26)
andrew
:3
who are you
ребята сделайте статью ))) видите как сложно это к пониманию ))) думаю она будет популярна
Anonymous
Он тащит связные данные через IN
andrew
а joinWith тащит данные вместе с запросом
andrew
через join
andrew
насколько я помню
andrew
но там есть и свои какие то заморочки, я давно там по исходникам не ползал
andrew
лучше использовать joinWith, он одним запросом все соберет
Anonymous
Угу. Надо в сорцах глянуть
andrew
а with - да, он собирает массив айдишников и отправляет запрос
Anonymous
Но там за два
andrew
но это не жадная загрузка, так как жадная это 1 запрос через join
Anonymous
запроса
andrew
joinWith*
Anonymous
who are you
в общем кому нужно вот 4 способа получить данные из двух таблиц в одном скрине
who are you
http://shot.hsdn.org/5jmUaVAI
andrew
По умолчанию, метод joinWith() будет использовать конструкцию LEFT JOIN для объединения основной таблицы со связной. Вы можете указать другой тип операции JOIN (например, RIGHT JOIN) с помощью третьего параметра этого метода - $joinType. Если же вам нужен INNER JOIN, вы можете вместо этого просто вызвать метод innerJoinWith().
Вызов метода joinWith() будет жадно загружать связные данные по умолчанию. Если вы не хотите получать связные данные, вы можете передать во втором параметре $eagerLoading значение false.
andrew
поэтому рекомендуют использовать joinWith
andrew
1 запрос лучше чем 2
Anonymous
andrew
нет ну если там не гигабайты обрабатываются
andrew
то выгоднее сделать 1 крупный запрос, чем 10 мелких
Anonymous
Ну да)
andrew
по времени
Anonymous
Тут по ситуации
who are you
мой запрос получается работал
andrew
с ситуациями, когда не нужно использовать жадную загрузку, я пока не сталкивался
who are you
только я не знал что надо выводить данные так
<li>Обводка труб: <?=$item->priceFeatures->pipe?> шт.</li>
Anonymous
Если ты так выведешь без жадной, то у тебя будет +1 запрос к бд вроде
who are you
я пытался выводить эти данные так
$item['pipe']
andrew
+
andrew
если перед этим сделан запрос с joinWith то данные в кэше модели
andrew
а если просто - то да
andrew
будет еще один запрос
andrew
who are you
в инете нет примеров как во вьювере выводить полученные данные
who are you
в этом был тупик
who are you
запросы научили делать
andrew
ну теперь все норм
who are you
а вот как вывести хз
Anonymous
Anonymous
Это хорошая тема чтобы разобраться
andrew
+
Anonymous
Не всегда обо всем могут написать
Anonymous
Темболее в РУ доке
andrew
юзай документацию, если не понятно, то лезь в исходники, там еще нагляднее все увидишь
who are you
да эта тема вообще самая из нужных, не представляю сайт без JOIN запросов
who are you
и так мало ответов
Antony
https://yii2-cookbook.readthedocs.io/
Есть еще кукбук неплохой
who are you
by Alexander Makarov
who are you
тут опечатка ?
who are you
или он Александер
Antony
https://github.com/samdark
Anonymous
Александр. Да. CoreDev Yii
who are you
блин я думал Александр пишется так а не Александер
Anonymous
Antony
Если транслитерация - то без.
Аналог в английском - Alexander.
who are you
блин
who are you
а я отца всегда писал без Е буквы )))
Antony
Это как Constantine
Antony
И прочие
Antony
В офф документах по идее имена должны транслитироваться, а так для англоязычных пользователей привычней все же аналог на их языке.
who are you
а если я захочу приДжоинить три таблицы мне тоже надо в модель добавлять метод с hasOne той таблицы ?
who are you
типа так
public function getTab1() {
return $this->hasOne(Tab1::className(), ['id' => 'id']);
}
public function getTab2() {
return $this->hasOne(Tab2::className(), ['id' => 'id']);
}
who are you
ну более менее логика стала понятной теперь