
andrew
07.03.2017
15:50:25
По умолчанию, метод joinWith() будет использовать конструкцию LEFT JOIN для объединения основной таблицы со связной. Вы можете указать другой тип операции JOIN (например, RIGHT JOIN) с помощью третьего параметра этого метода - $joinType. Если же вам нужен INNER JOIN, вы можете вместо этого просто вызвать метод innerJoinWith().
Вызов метода joinWith() будет жадно загружать связные данные по умолчанию. Если вы не хотите получать связные данные, вы можете передать во втором параметре $eagerLoading значение false.
поэтому рекомендуют использовать joinWith
1 запрос лучше чем 2

MSQ
07.03.2017
15:51:12

Google

andrew
07.03.2017
15:51:40
нет ну если там не гигабайты обрабатываются
то выгоднее сделать 1 крупный запрос, чем 10 мелких

MSQ
07.03.2017
15:51:49
Ну да)

andrew
07.03.2017
15:51:51
по времени

MSQ
07.03.2017
15:51:57
Тут по ситуации

Konstantin
07.03.2017
15:52:39
мой запрос получается работал

andrew
07.03.2017
15:52:42
с ситуациями, когда не нужно использовать жадную загрузку, я пока не сталкивался

Konstantin
07.03.2017
15:52:58
только я не знал что надо выводить данные так
<li>Обводка труб: <?=$item->priceFeatures->pipe?> шт.</li>

MSQ
07.03.2017
15:53:44
Если ты так выведешь без жадной, то у тебя будет +1 запрос к бд вроде

Konstantin
07.03.2017
15:53:55
я пытался выводить эти данные так
$item['pipe']

andrew
07.03.2017
15:53:56
+
если перед этим сделан запрос с joinWith то данные в кэше модели
а если просто - то да

Google

andrew
07.03.2017
15:54:28
будет еще один запрос

Konstantin
07.03.2017
15:55:41
в инете нет примеров как во вьювере выводить полученные данные
в этом был тупик
запросы научили делать

andrew
07.03.2017
15:56:14
ну теперь все норм

Konstantin
07.03.2017
15:56:20
а вот как вывести хз

MSQ
07.03.2017
15:56:25
Это хорошая тема чтобы разобраться

andrew
07.03.2017
15:56:34
+

MSQ
07.03.2017
15:56:45
Не всегда обо всем могут написать
Темболее в РУ доке

andrew
07.03.2017
15:56:54
юзай документацию, если не понятно, то лезь в исходники, там еще нагляднее все увидишь

Konstantin
07.03.2017
15:57:14
да эта тема вообще самая из нужных, не представляю сайт без JOIN запросов
и так мало ответов

Antony
07.03.2017
15:57:35
https://yii2-cookbook.readthedocs.io/
Есть еще кукбук неплохой

Konstantin
07.03.2017
15:59:49
by Alexander Makarov
тут опечатка ?
или он Александер

Antony
07.03.2017
16:00:33
https://github.com/samdark

Google

MSQ
07.03.2017
16:01:08
Александр. Да. CoreDev Yii

Konstantin
07.03.2017
16:02:29
блин я думал Александр пишется так а не Александер

MSQ
07.03.2017
16:03:21

Antony
07.03.2017
16:03:28
Если транслитерация - то без.
Аналог в английском - Alexander.

Konstantin
07.03.2017
16:03:42
блин
а я отца всегда писал без Е буквы )))

Antony
07.03.2017
16:04:03
Это как Constantine
И прочие
В офф документах по идее имена должны транслитироваться, а так для англоязычных пользователей привычней все же аналог на их языке.

Konstantin
07.03.2017
16:06:01
а если я захочу приДжоинить три таблицы мне тоже надо в модель добавлять метод с hasOne той таблицы ?
типа так
public function getTab1() {
return $this->hasOne(Tab1::className(), ['id' => 'id']);
}
public function getTab2() {
return $this->hasOne(Tab2::className(), ['id' => 'id']);
}
ну более менее логика стала понятной теперь

Konstantin
07.03.2017
16:09:33
а вообще это сложно к пониманию, чтобы взаимосвязь таблиц устанавливать где то в модели а не в запросе

Аmal
07.03.2017
16:10:07
Да ничего сложного вроде если посидеть

Konstantin
07.03.2017
16:10:14
всю жизнь делал это в запросах непосредственно а тут надо методы отдельные еще делать

Аmal
07.03.2017
16:10:32
Можно и без прокладывания связи делать джоины
У тебя не путаются запросы с переменными внутри вызовов функций... Старый добрый mysql_query

Aleksandr
07.03.2017
16:12:11

Konstantin
07.03.2017
16:12:31
тогда по логике и html с php не надо смешивать)

Google

andrew
07.03.2017
16:12:38

Aleksandr
07.03.2017
16:13:02
with и joinWith выбирают данные одинаковым количеством запросов, только joinWith в запрос добавляет join со связанными таблицами
т.к. это может влиять на конечный результат

andrew
07.03.2017
16:14:27
http://www.yiiframework.com/doc-2.0/yii-db-query.html#join%28%29-detail

Konstantin
07.03.2017
16:15:24
Саш, вот первый метод если смотреть, если его использовать, нужно прописывать в модель связь (hasOne), ведь вроде бы запрос построен как старые времена с явным указанием какую табу джоинить?
http://shot.hsdn.org/5jmUaVAI

andrew
07.03.2017
16:16:36
1 способ это бред какой то
сначала делается join а потом еще и IN запрос

Konstantin
07.03.2017
16:18:11

Aleksandr
07.03.2017
16:18:17
AR - это о моделях. не надо на AR пытаться работать понятиями Query, в частности выбирать отдельные колонки

Admin
ERROR: S client not available

andrew
07.03.2017
16:18:55
не вижу смысла в этом
joinWith работает как надо
ваш первый способ бессмысленен

Aleksandr
07.03.2017
16:19:58

andrew
07.03.2017
16:20:26
разе joinWith не забирает данные жадным запросом?

Aleksandr
07.03.2017
16:20:33
нет

andrew
07.03.2017
16:20:39
О_о

Aleksandr
07.03.2017
16:20:46
и with и joinWith - это вариации жадного запроса

Google

Aleksandr
07.03.2017
16:20:55
но не такого жадного как в yii1

andrew
07.03.2017
16:21:20
то есть joinWith все равно отправляет IN запрос с массивом айдишников??

Aleksandr
07.03.2017
16:21:29
да

andrew
07.03.2017
16:21:46
вот так новость, надо это проверить

Konstantin
07.03.2017
16:21:57
отправляет )
сперва делает
http://shot.hsdn.org/ue4eIYjV
потом еще раз
http://shot.hsdn.org/omTOq1bP

Aleksandr
07.03.2017
16:23:15

andrew
07.03.2017
16:23:34
а с какой версии?

Aleksandr
07.03.2017
16:23:39
с 2

andrew
07.03.2017
16:23:48
хм

Aleksandr
07.03.2017
16:24:48
вау, 2.0 https://framework.zend.com/blog/2017-03-07-expressive-2.html
вот это бы я всем посоветовал пощупать. конфетка

andrew
07.03.2017
16:25:50
а что лучше изучать после юи, зенд или симфони?
я пока остановился на симфони

Aleksandr
07.03.2017
16:26:11
я думаю да, симфони
но экпрессив - это не зенд, а микрофреймворк без зенда)

Аmal
07.03.2017
16:26:47
С phpixie кто нибудь работал?

Aleksandr
07.03.2017
16:27:34

andrew
07.03.2017
16:27:53
я слышал подкаст с ним :D
да, отправляется 2 запроса, даже если использовать joinWith O_o