These are chat archives for LaravelRUS/chat

15th
Dec 2017
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:31

Всем привет!
Подскажите, пожалуйста, как можно реализовать следующую вещь:

Пишу чат, в котором можно прикреплять какие-то объекты (например выбрать своего сотрудника и в чате появится его карточка). Для хранения сообщений выбрал структуру вида:

id - идентификатор сообщения
chat_id - идентификатор чата
author_id - идентификатор пользователя, который написал сообщение
message - текстовое сообщение
attachment_type - тип прикрепления (сотрудник, товар и т.д.)
attachment_id - идентификатор этого прикрепления

Как можно сделать связь между сообщением и прикрепленными объектами? полиморфик немного подругому работает - он не подходит. Я пытался делать условно:

public function attachment()
    {
        if ($this->attachment_type == 'product') {
            return $this->hasOne(Product::class, 'id', 'attachment_id');
        } elseif ($this->attachment_type == 'employee') {
            return $this->hasOne(Employee::class, 'id', 'attachment_id');
        } elseif($this->attachment_type == 'department') {
            return $this->hasOne(Department::class, 'id', 'attachment_id');
        }
    }

Но, он ругается: Call to a member function addEagerConstraints() on null, если сообщение без прикреплений. В общем, подскажите, как лучше реализовать такое :)

Ваня Devium
@webdevium
Dec 15 2017 09:34
Покажи пример запроса как ты вытягиваешь
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:39
// выбираю сам чат
$chat = Chat::where('id', $id)
// проверяю, что человек является членом чата
                ->whereHas('members', function ($q) { 
                    $q->where('user_id', Auth::id()); 
                })
// подтягиваю сообщения чата с прикреплениями
                ->with('messages.attachement')
// если не получил такого чата, пробрасываю 404
                ->firstOrFail();
у Chat есть связь с сообщениями Message, если вдруг нужно будет
public function messages()
    {
        return $this->hasMany(Message::class);
    }
Ваня Devium
@webdevium
Dec 15 2017 09:44
короче, у тебя в attachment() нет default возврата
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:44
Спасибо, капитан
Ваня Devium
@webdevium
Dec 15 2017 09:45
потому связь возвращает null, а не relation
вот и ломается все
сделай switch, который по default будет возвращать что-то
это раз, два: я очень сомневаюсь, что ->with() будет работать. ->load() еще пол беды
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:48
Собственно суть моего вопроса в том, как это сделать элегантнее. Я почти уверен, что в ларе есть нативное решение, которое позволит избавиться от if/switch. а подтаскивать объекты по запросу - это извращение то еще. выкатил 100 сообщений, если 20 из них с атачами - это 20 доп запросов к бд.
Ваня Devium
@webdevium
Dec 15 2017 09:50
morph, только morph
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:53
morph работает по другому
Ваня Devium
@webdevium
Dec 15 2017 09:53
он твою задачу шикарно решит
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 09:55
морф, это когда один и тот же объект может относиться к нескольким другим.
У меня обратная ситуация - когда есть один объект и к нему может относиться множество.
Ваня Devium
@webdevium
Dec 15 2017 10:01
хм, в общем, я не встречал обратного морфа
KulakoffArtyom
@KulakoffArtyom
Dec 15 2017 10:13
ладно, пойду костыль запилю
nikas64527
@nikas64527
Dec 15 2017 10:33

всем привет, подскажите, пожалуйста, по одному вопросу
отправляю почту через Mail::send() - все работает, но генерация страницы около 2 секунд
настроил вчера Mail::queue() - генерация страницы 30-50мс, все отлично

сегодня пришел, проверил - письма перестали отправляться, в таблицу jobs в базе все добавляется, но письма не приходят
Mail::send() работает без изменений, письма приходят, но долго

очередность сделал через database, отправка почты через smtp яндекса
могу я как-то отследить, отправились ли письма?
Ваня Devium
@webdevium
Dec 15 2017 11:00
воркеры правильно работают?
nikas64527
@nikas64527
Dec 15 2017 11:14
@webdevium я прошу не кидать тапками, но - без воркера работать не будет?
похоже, что нет
странно, я вчера отправил около 50 тестовых писем, все пришли
сейчас попробую настроить воркера
Ваня Devium
@webdevium
Dec 15 2017 11:16
ну как бы включи логику: ты складируешь в базу записи, с заданием "отправить письмо". Кто-то или что-то же должны придти в базу и проверить наличие заданий, правда?)))
nikas64527
@nikas64527
Dec 15 2017 12:54
@webdevium
да, косякнул я - думал там по умолчанию проверка какая-то через php идет навроде циклической проверки базы
настроил, все работает, спасиб
KarmaBot
@KarmaBot
Dec 15 2017 12:54
Спасибо (+1) для @webdevium принято! Текущая карма +350.
Enebra
@Enebra
Dec 15 2017 14:38
здравствуйте, установил laravel 5.5 и перестали работать сессии
Ваня Devium
@webdevium
Dec 15 2017 14:41
мало инфы
Andrey
@daaner
Dec 15 2017 16:32
@Enebra а как до этого? работали? может установка лары все поломала?
JhaoDa
@jhaoda
Dec 15 2017 17:14
@Enebra Ваня, чо тебе на тостере не сиделось? Ты бы документацию начал читать и вопросы правильно задавать
Василий
@DomEdI
Dec 15 2017 18:11
@Enebra недавно столкнулся с такой проблемой, помогла только переустановка ларки. Как вариант проверь права доступа к папке storage
Не работали сессии, переустановил ларку, пачкой закинул контроллеры, роуты, композеры, провайдеры и т.д. и, о чудо, она заработала
Ваня Devium
@webdevium
Dec 15 2017 18:13
Я не считаю, что это чудо или магия. Это банальное недопонимание устройства фреймворка и файловой системы.
Василий
@DomEdI
Dec 15 2017 18:14
Подробнее можно?
Ваня Devium
@webdevium
Dec 15 2017 18:16
Сессии могу отвалить только из-за трех причин:
  • нет прав записи на storage
  • сломанное шифрование кук
  • кривизна vendor папки
Василий
@DomEdI
Dec 15 2017 18:18
Права были, а остальное не сложно ли копать по сравнению с переустановкой? Если сломалось что то одно, то не факт что это единственная вещь, которая сломана...
JhaoDa
@jhaoda
Dec 15 2017 18:22
@DomEdI что, у вас кнопки на цифровом блоке клавы не нажимаются? Винду переустановим.
@DomEdI норм же, чо копаться
Василий
@DomEdI
Dec 15 2017 18:23
@jhaoda аха-ха, смешно (нет)
JhaoDa
@jhaoda
Dec 15 2017 18:25
@DomEdI именно
Василий
@DomEdI
Dec 15 2017 18:26
@jhaoda вот всегда слышал о большей доброжелательности англоязычных коммьюнити и чатов, пили оказалось, там своими знаниями никто так не выпендривается
JhaoDa
@jhaoda
Dec 15 2017 18:27
@DomEdI так что ты тут делаешь?
Василий
@DomEdI
Dec 15 2017 18:31
@jhaoda наблюдать запрещено? Я два вопроса задал, мне хватило ответного стеба. Теперь просто наблюдаю
@jhaoda не все как ты и ещё кто то всю жизнь сидят на одной технологии, у меня в веб разработке был перерыв два с половиной года, и, естественно, знания меньше.
JhaoDa
@jhaoda
Dec 15 2017 18:33
@DomEdI хм, а как можно сидеть всю жизнь на ларавел, если ему всего-то лет пять?
@DomEdI я разве что-то сказал про твои знания? Я сказал про твоё отношение в процессу получения знаний. «Лучше переустановить, чем разбираться» — это путь в никуда.
Василий
@DomEdI
Dec 15 2017 18:36
@jhaoda это твоё мнение, а мое заключается в том, что надо постепенно набирать обороты, а не кидаться вглубь с первых же дней, и да, это мнение и способ помогли мне в изучении многих технологий. Подводя итог считаю наш разговор бессмысленным, ты со своей колокольни оцениваешь всех по себе, мне одно без надобности. Всего доброго
JhaoDa
@jhaoda
Dec 15 2017 18:36
@DomEdI ага, не кашляй
Котоны, а вы как считаете — как научиться, если не учиться?
Ваня Devium
@webdevium
Dec 15 2017 18:39
Нужно переставать переставать и начинать начинать мыслить в правильном русле
Максат
@maqsat
Dec 15 2017 20:35
Добрый вечер! помогите кто знает, мы храним один файл в /storage(http://taima.kz/file/audio/2017/12/15/124200373600.mp3) другой в /public(http://taima.kz/1513316861_article_a.mp3) но почему то в аудиофайле в котором храниться в /storage нету кнопки скачать?
Vlad Shcherbin
@VladShcherbin
Dec 15 2017 21:40
@jhaoda на тебя за неделю 3 жалобы. Если продолжишь так и дальше (докапываться до людей) - пополнишь список справа. Своё недовольство всем и чсв можешь показывать в других чатах.
JhaoDa
@jhaoda
Dec 15 2017 21:41
@VladShcherbin мало, надо пять. За день.
Vlad Shcherbin
@VladShcherbin
Dec 15 2017 21:41
@jhaoda моё дело предупредить, дальше делай как хочешь
JhaoDa
@jhaoda
Dec 15 2017 21:42
@VladShcherbin да-да