Сергей
Xxx.yyy=5
SiZE
Я всегда начинаю с составления SQL запроса.
Evgeniy
Konstantin
Evgeniy
Konstantin
короче если у тебя, к примеру, есть статья, а у нее есть теги, и это связь N-N
Konstantin
то
Konstantin
Article::find()->joinWith('tags')->andFilterWhere(['tag.id' => $tag_ids])
Konstantin
работать будет, то найдет все статьи, в которых есть хотя бы один тег из $tag_ids
Konstantin
если придумаешь, как без велосипедов найти все статьи, в которых есть каждый из тегов в $tag_ids - похвастайся
Evgeniy
Konstantin
ну вот, и в своем стремлении к изяществу и нормализации ты можешь выгрести жуткие и тяжеловесные запросы
Evgeniy
Владимир
Как прикрутить валидацию номера телефона?
Владимир
<?=$form->field($model,'phone')->widget(MaskedInput::className(),['mask'=>'+7 (999) 999-99-99'])->textInput(['placeholder'=>'+7 (999) 999-99-99','class'=>''])->label('Ваш Телефон');?>
Владимир
Выводится маска, но когда начинаю вводить то пробелы и скобки не вставляются автоматом
Evgeniy
Konstantin
ну добавить избыточности
Konstantin
ради упрощения запросов
Konstantin
ну вот выводишь ты статьи, а в них комментарии есть
Konstantin
а надо тебе показать возле статьи сколько комментариев
Konstantin
так лучше завести прямо явный счетчик в статье и его инкрементировать, чем каждый раз пересчитывать комментарии в таблице комментариев
Konstantin
не говоря уже о том, чтобы отсортировать статьи по количеству комментариев\
Evgeniy
Konstantin
связи 1-N не представляют никаких сложностей
Konstantin
ну и что?
Konstantin
ой
Konstantin
продукт и модель связаны как N-N?
Konstantin
N-N
Dmytro 🇺🇦
Немного оффтопа
Dmytro 🇺🇦
http://www.opennet.ru/opennews/art.shtml?num=47192
Konstantin
круто
Konstantin
и новый сублайм сегодня появился
Rinat
типа противовес шторму?)
Konstantin
Evgeniy
Rinat
да, это так
Konstantin
вообще, ты можешь отдельным запросом получить все модели нужной марки
Konstantin
а после этого вторым запросом уже все товары нужных моделей
Konstantin
а если хочешь, можешь еще эти два запроса выполнять не отдельно, а вместе, как вложенный запрос
Konstantin
между джоинами и вложенным запросом я бы тут выбрал вложенный запрос
Konstantin
ну и попробуй
Konstantin
похвастаешься
Evgeniy
Niko
@beowulfenator чем вложенный запрос лучше? разве они быстрей чем один джойн?
Konstantin
смотря какой джоин и смотря какой запрос
Niko
не в случае когда 2000 к 7000 джойнятся, а когда посты юзера доставать
Konstantin
отложим вложенный запрос :)
Konstantin
у тебя есть таблица с юзерами и таблица с их постами
Konstantin
если тебе надо запросить юзеров с их постами...
Niko
а у постов коменты с юзерами, теги
Konstantin
о, и с комментариями!
Konstantin
смотри
Konstantin
у тебя 100 юзеров, у каждог по 10 постов, а в каждом посте по 5 комментариев
Konstantin
если запросить все с двумя джоинами, то result set будет содержать сколько строчек?
Konstantin
5000
Konstantin
и вот получается, что содержимое колонок каждого юзера повторилось по 500 раз
Konstantin
памяти у сервера отожралось немало
Konstantin
именно поэтому в yii2 такую фигню свернули, а with() сделает три запроса: первый получит 100 юзеров, второй получит 1000 постов, а третий получит 5000 комментариев
Konstantin
вложенный запрос или не вложенный тут не так важно, вопрос скорее в том, что запросов несколько, а не один
Konstantin
как-то так
Niko
я вообще думал когда запросов несколько - это не скорее. И не понимаю чем with() в твоем описании лучше чем joinWith, если в первом случае мы сделали 1 запрос и получили 5000 строк, а во втором 3 запроса и 6100 строк
gud3
кто-то может обьяснить почему так?
https://github.com/yiisoft/yii2/issues/14754
Konstantin
Konstantin
Konstantin
в php волшебные массивы, которым может позавидовать любой другой язык :)
Konstantin
фигня в том, что массивы в php сохраняют порядок даже для символьных ключей
Konstantin
поэтому $myarray = ['a' => 1, 'b' => 2] - это совсем не то же самое, что $myarray = ['b' => 2, 'a' => 1]
Konstantin
там надо поменять их порядок, чтобы в массиве authenticator непременно шел за corsFilter
Konstantin
потому что где-то в коде есть foreach, в который authenticator должен поступить первым
Konstantin
то, что ты делаешь в контроллере - это не редактирование элементов
Konstantin
смена порядка записей в массиве делается слегка костыльно, ты сперва убиваешь запись authenticator, а затем добавляешь ее снова, но она добавляется в конец
Konstantin
как-то так