
Marat
07.10.2018
06:16:51
сделал запрос через join
$team=User::find()->select('user.*')->innerJoin('user_team', 'user_team.team_user_id = user.id')->where(['user_team.user_id' =>Yii::$app->request->post('user_id')])->all();
но хотелось бы знать как можно подобное сделать через отношения ?

Сергей
07.10.2018
06:17:53
По id пользователя получить его команду?

Google

Marat
07.10.2018
06:18:46
мм да т.е. делаю запрос в user_team где вытаскиваю id`шники команды и по этим id вытаскиваю данные пользователей

Сергей
07.10.2018
06:19:31
Team user id это что за поле?
Вроде есть user_team.id
А.. понял.
Тебе тут по хорошему по другому надо.
User: id, name, team_id
User_team: id
Или три:
User: id, name
User_team: id
User_team_user: user_id, team_id
И тогда выборки будет просто делать)

Marat
07.10.2018
06:23:09
окей сейчас подумаю спасиб за совет )

Сергей
07.10.2018
06:33:30

Ad.x ??
07.10.2018
08:32:54
все доступно и понятно на нескольких языках даже

Andrey
07.10.2018
08:56:34
че там ту форму делать?!... )))
Ну разбирался чтобы верстка нормальная была)) надо было плюнуть и сделать тупо на jsке все и отправлять форму на контроллер и все) максимум час бы заняло) ну а так да пока разбираюсь как и что работает)


Artyom
07.10.2018
10:34:40
Вчера, как-то активно обсуждался мой вопрос про sql-запрос c группировкой.
Я выкладывал вариант:
SELECT DISTINCT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT MAX(created_at) as maxdt, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.customer_id = o.customer_id AND o.created_at=o2.maxdt
@sizeg тут правильно раскритиковал про использование DISTINCT, он тут бессмысленен. А то, что я хотел сделать (исключить ситуацию, когда у одного покупателя есть несколько заказов с одной датой), можно реализовать с помощью дополнительной группировки. В итоге вышло так:
SELECT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT MAX(created_at) as maxdt, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.customer_id = o.customer_id AND o.created_at = o2.maxdt
GROUP BY o.customer_id
@wolcharryk предлагал такой вариант:
SELECT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT max(id) as order_id, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.order_id = o.id;
Этот вариант не подходит, так как есть допущение - что максимальный ID - это всегда последний заказ. И если я не ошибаюсь, то такой запрос можно просто переписать вот так: SELECT MAX(id), created_at, customer_id FROM `order GROUP BY customer_id`
В конце концов пошёл по другому пути и сделал вот такой запрос:
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY created_at DESC),',',1),
MAX(created_at),
customer_id
FROM `order`
GROUP BY customer_id
Суть простая. GROUP_CONCAT(id ORDER BY created_at DESC) позволяет нам получить строку, состоящую из id сгруппированных строк через запятую отсортированные по полю created_at от большего к меньшему, то есть первый id - это тот самый ID последнего заказа у данного покупателя. SUBSTRING_INDEX возвращает этот первый ID.
Всем спасибо за участие :)
Привет, такой SELECT MAX(id), created_at, customer_id FROM `order GROUP BY customer_id` , думаю не прокатит, нет группировки по created_at, проверить на косячность можно таким образом SET SESSION sql_mode = CONCAT('ONLY_FULL_GROUP_BY,', (SELECT @@sql_mode));

Google


Maxim
07.10.2018
14:05:23
Вчера, как-то активно обсуждался мой вопрос про sql-запрос c группировкой.
Я выкладывал вариант:
SELECT DISTINCT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT MAX(created_at) as maxdt, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.customer_id = o.customer_id AND o.created_at=o2.maxdt
@sizeg тут правильно раскритиковал про использование DISTINCT, он тут бессмысленен. А то, что я хотел сделать (исключить ситуацию, когда у одного покупателя есть несколько заказов с одной датой), можно реализовать с помощью дополнительной группировки. В итоге вышло так:
SELECT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT MAX(created_at) as maxdt, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.customer_id = o.customer_id AND o.created_at = o2.maxdt
GROUP BY o.customer_id
@wolcharryk предлагал такой вариант:
SELECT o.id, o.created_at, o.customer_id
FROM `order` o
INNER JOIN (
SELECT max(id) as order_id, customer_id
FROM `order`
GROUP BY customer_id
) o2 on o2.order_id = o.id;
Этот вариант не подходит, так как есть допущение - что максимальный ID - это всегда последний заказ. И если я не ошибаюсь, то такой запрос можно просто переписать вот так: SELECT MAX(id), created_at, customer_id FROM `order GROUP BY customer_id`
В конце концов пошёл по другому пути и сделал вот такой запрос:
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY created_at DESC),',',1),
MAX(created_at),
customer_id
FROM `order`
GROUP BY customer_id
Суть простая. GROUP_CONCAT(id ORDER BY created_at DESC) позволяет нам получить строку, состоящую из id сгруппированных строк через запятую отсортированные по полю created_at от большего к меньшему, то есть первый id - это тот самый ID последнего заказа у данного покупателя. SUBSTRING_INDEX возвращает этот первый ID.
Всем спасибо за участие :)
Distinct это плохой вариант. Он всегда проходит всю таблицу. Чем больше будет таблица тем он будет требовательней к ресурсам. оконные функции из mysql 8 это сейчас то, что тебе нужно


Mirvali
07.10.2018
15:02:43
Backendi xotel ustanovit admin panel

SiZE
07.10.2018
15:04:43
Хоспода, есть такая тема @bullhorn_bot С помощью него можно слать сообщения в телегу. Это для тех кому лень поднимать прокси на сервере или нет такой возможности. Я вобпщемто использую его для отправки логов из Й.
Но вот какая фигня. Не могу добиться переносов строк. Если я руками отправляю сообщение с переносом, то все ок, если вставляю иишный лог, то вообще в сообщении перестают работать переносы.
Это фишка телеги такая или этого бота или что то третье?

Konstantin
07.10.2018
15:13:51

SiZE
07.10.2018
15:14:51

Konstantin
07.10.2018
15:15:56
Из телеги в слак чат ?

Maxim
07.10.2018
15:16:31
Всем привет. Кто-то пользуется вот этим плагином: https://github.com/nvlad/yii2support/blob/master/README.md ???
Интересует автокомплит в Yii::t
Че-то не заводится
Ну или другой плагин, который даст сапорт автокомплиту i18n.... Ато заманался каждый раз вспоминать как же я там назвал строку...

Дмитрий
07.10.2018
15:35:40

SiZE
07.10.2018
15:41:38

Сергей
07.10.2018
15:42:26

SiZE
07.10.2018
15:44:27

Matviy
07.10.2018
17:45:37
Слушайте, а что, в MySQL оператор BETWEEN выдает ноль результатов, если значения совпадают? Ну типа:
BETWEEN '35.00' AND '35.00'
И все значения 35, оно бы должно было отдавать их, но отдает ноль строк

SiZE
07.10.2018
18:01:28

Matviy
07.10.2018
18:01:58
Ну только что порообовал

SiZE
07.10.2018
18:03:43
Вообще нет, иди дальше пробуй )
но у тебя ж строка

Google

SiZE
07.10.2018
18:04:35
или ты с числом 35 сравниваешь?

Matviy
07.10.2018
18:06:11
Хм
Не. ну там нормально все работает, если крайние значения отличаются
Все. нашел, мой затуп

SiZE
07.10.2018
18:14:29
спасибо)

Matviy
07.10.2018
18:19:33

Andrey
07.10.2018
18:52:41
Ребят такая штука. Нужен совет, расширение ищу. Задача состоит в следующем нужно разрешить пользователю загружать в поле одну картинку, и так же в другое поле аля галерея аля пост/статья . Как реализовать? С yii2-images от костарико там костылики или я кривой. То есть сейчас все заливает но редактирование так не разобрался. Ресайз на выходе важная штука)

PowerAxis
07.10.2018
19:10:01
Yii2 dreamteam file upload поведение юзай

Artyom
07.10.2018
19:15:13
от чего может не работать \Yii::error($errorMsg); в консольных приложениях?
т.е. оно проходит, но в логе пусто.

Dmitriy
07.10.2018
19:21:50
не разрешен error для записи?

Andrey
07.10.2018
19:24:03

Artyom
07.10.2018
19:30:07

SiZE
07.10.2018
20:11:05
Ты типа exit делаешь и ждёшь сообщение в логе?

Artyom
07.10.2018
20:11:31
Нет, я типа не понимаю чего у меня все ломается а сообщений в логе нет.
Для меня сюрпризом было, хотя, конечно тупанул, забыл совсем что оно не сразу в лог пишет.

Art
07.10.2018
20:14:48
обычный select option

Artyom
07.10.2018
20:55:48
$rateClub->in_queue = 0;
$rateClub->save();
что в этих двух несчастных строчках не так?

Google

Artyom
07.10.2018
20:56:00
О_о
сеттит как false и при сохранении выдает мне ошибку валидации, что должно быть integer =\
нид хелп.

Admin
ERROR: S client not available

Artyom
07.10.2018
20:58:55
самое интересное что если в дебагере засетить то ок.

Сергей
07.10.2018
20:59:03
Там сеттер есть? Покажи ещё правила валижации

Artyom
07.10.2018
21:01:22
не, нет сеттера, только мистика, везде работает, а там нет. =\
Такая [['club_id', 'in_queue'], 'integer'] валидация.

Сергей
07.10.2018
21:03:07
Магия)
Кинь в личку весь класс, глянв

Artyom
07.10.2018
21:05:25
низя =(
в двух словах... я добавил поле в таблицу, все прописал. Везде сеттится все без проблем true/false/1/0, все ок. Выполняется демон и не проходит валидацию, потому что там false вместо нуля, пробовал просто false тоже не проходит. Интересно, что если я беру сам, во время дебага, засетчиваю, то все ок. Ровно те же строчки выполняю:
$rateClub->in_queue=0;
$rateClub->save();
и тариф разлочивается.
никто не сталкивался?
Такая [['club_id', 'in_queue'], 'integer'] валидация. Поле типа tinyint.
никаких сеттеров и чего-то подобного нет.

Сергей
07.10.2018
21:12:08
В демоне прям присваивается ноль или какая-то переменная?

Artyom
07.10.2018
21:12:39
прям один в один. Странно, рестартанул демон, теперь все ок.
Спасибо.

Сергей
07.10.2018
21:12:53
Ну точно магия

Artyom
07.10.2018
21:13:33
Ага мистика, ненавижу когда такое происходит, сразу думаешь что за *ерня такая.
примерно так.

Google

Ad.x ??
07.10.2018
22:20:38

Сергей
08.10.2018
07:32:39
Доброе утро!
Ещё немного и пробьём планку в 1к участников :)

Crestoff
08.10.2018
07:55:53
Вопрос такой, в gridview для одного из аттрибутов я получаю динамическое value,
потом я расскрашиваю в красный если значение value ниже порога, но как видно из кода
я заново расчитываю этот value, вопрос - как обратиться к уже расчитанному value чтобы
я мог использовать его в contentOptions?
'attribute' => 'uniques',
'label' => 'Unique, %',
'format' => 'html',
'visible' => ($searchModel->group_by == LogVisit::GROUP_BY_HOURS),
'value' => function ($model, $key, $index, $column) {
return round($model->uniques / max($model->raws, 1) * 100);
},
'contentOptions' => function ($model, $key, $index, $column) {
return (round($model->uniques / max($model->raws, 1) * 100) < 95) ? ['class' => 'danger'] : false;
},
Доброе утро


Vitalii
08.10.2018
08:04:04
Вопрос такой, в gridview для одного из аттрибутов я получаю динамическое value,
потом я расскрашиваю в красный если значение value ниже порога, но как видно из кода
я заново расчитываю этот value, вопрос - как обратиться к уже расчитанному value чтобы
я мог использовать его в contentOptions?
'attribute' => 'uniques',
'label' => 'Unique, %',
'format' => 'html',
'visible' => ($searchModel->group_by == LogVisit::GROUP_BY_HOURS),
'value' => function ($model, $key, $index, $column) {
return round($model->uniques / max($model->raws, 1) * 100);
},
'contentOptions' => function ($model, $key, $index, $column) {
return (round($model->uniques / max($model->raws, 1) * 100) < 95) ? ['class' => 'danger'] : false;
},
В модели добавить новый метод, чтобы код не дублировался. А чтобы ещё и высчитывалось только 1 раз - реализовать паттерн lazy loading. Как-то так

Crestoff
08.10.2018
08:06:09
спс.

Ad.x ??
08.10.2018
08:13:11
Вопрос такой, в gridview для одного из аттрибутов я получаю динамическое value,
потом я расскрашиваю в красный если значение value ниже порога, но как видно из кода
я заново расчитываю этот value, вопрос - как обратиться к уже расчитанному value чтобы
я мог использовать его в contentOptions?
'attribute' => 'uniques',
'label' => 'Unique, %',
'format' => 'html',
'visible' => ($searchModel->group_by == LogVisit::GROUP_BY_HOURS),
'value' => function ($model, $key, $index, $column) {
return round($model->uniques / max($model->raws, 1) * 100);
},
'contentOptions' => function ($model, $key, $index, $column) {
return (round($model->uniques / max($model->raws, 1) * 100) < 95) ? ['class' => 'danger'] : false;
},
забей просто. Этот расчет ничтожно мал для сервера. нагрузки никакой не даст. К тому же для админки. наскоко я понял.
Округление можно удалить, оно ни к чему там. Значение же не выводится


Crestoff
08.10.2018
08:13:43
согласен, проще так и оставить. округление убрал. Спасибо!

Andrey
08.10.2018
08:20:57
ребят такой вопрос!) вывожу данные через listview, по дефолту надо чтобы данные не отображались и писался текст , и при заполнении формы чтобы уже отображались данные) как реализовать?