Сергей
ребят, а для веб сокетов что используете? помню много разговоров про центрифугу было. или может SSE и меркури?) поделитесь плиз
artem
всем привет) у меня есть приложение в котором src/Applicatio остальные части приложение доставляются субмодулями. в контейнере ставлю композер и выхватываю !! Error: Class 'Sub\CoreBundle\CoreBundle' not found in /var/www/src/Kernel.php on line 23
есть какие нибудь идеи?
artem
нашел проблему. все из-за аутолоад
Юра
Юра
Работало норм
Сергей
Работало норм
на фронте авторизация как? кука или jwt с полифилом?
Kirill
Подскажите, пожалуйста, что-то я туплю.
У меня есть энтити Company (id, title) и Employee (id, company_id, name)
Аннотации настроены правильно, inversedBy и mappedBy.
Могу ли я создать сущность Employee без указания Company, а затем связать их?
Вот как я делаю:
$employees = [];
foreach ($results as $result) {
$employee = new Employee();
$employee->setName($result['name']);
$this->em->persist($employee);
}
$company->setEmployees($employees);
$this->em->flush();
Как мне добиться желаемого? Чтобы у всех сотрудников проставлялось значение в поле company_id
Denis
Если точно так, то что в массиве $employees?
Юра
Юра
Kirill
Спасибо. Я думал, что доктрина сама заполнит это поле)
Юра
When a bidirectional association is updated, Doctrine only checks on one of both sides for these changes. This is called the owning side of the association.
Юра
в случае ManyToOne, owning side это там где стоит ManyToOne
Denis
доктрина-то заполнит... только ей надо передать, что заполнять
Юра
Тебе просто надо один раз разобраться что такое owning side и сразу отпадут много вопросов и багов
Юра
Обновление inverse side это чисто для себя, чтобы модели в памяти отражали то что сейчас в бд корректно. Доктрина туда не смотрит
Юра
У тебя в приципе может не быть инверс сайда и все будет работать
Юра
Получай эмплоев из репозитория и все )
Юра
Можно заморочиться еще дальше и у компнии возвращать ридонли массив работников, а управление работниками сделать через методы addEmployee и т.д. и сразу в ачивку тебе знание aggregates ddd
Сергей
Юра
Ну по сути этот меркур это брокер, симфа туда шлёт сообщения, браузер читает
Юра
Плюс в том что на стороне симфы ничего особо глобального не меняется. Не нужны никакие лонг раннинг процессы и т.д.
Юра
Это как если бы ты сам написал nodejs прослойку в который по апи слал бы сообщения, что некоторые делают зачем-то
Юра
Причем этот протокол меркур поддерживат к примеру даже дарт, это если надо в мобайл приложении получать обновления
Пилот
У тебя в приципе может не быть инверс сайда и все будет работать
меня всегда бесило, что ManyToOne оунинг сайд это Many, тк там есть знание о форейн ки.
в моем случае есть например две сущности, Initiative hasMany Questionnaire, то бишь у Инициативы есть несколько Опросников (простые polls), которые не могут быть ManyToMany с другими Инициативами и уникальны в рамках своей Инициативы.
проблема в том что я расцениваю Инициативу как агрегат рут в контексте ддд, а Опросник у нее это ManyToOne, то бишь оунинг сайд, и доктрина трекает его, а не Инициативу.
короче говоря мой клиентский код в моих мокрых фантазиях должен быть таким:
$questionnaire = new Questionnaire($initiative);
$initiative->addQuestionnaire($questionnaire);
$em->flush();
а не:
$questionnaire = new Questionnaire($initiative);
$em->persist($questionnaire);
$em->flush();
но это вроде решается через cascade: ['all'] и orphanRemoval: true
правда я не уверен что это бест практис в датамаперах типа доктрины и хибернейт ((
Пилот
если шо пидкажите будь ласка
Юра
Просто обновляй везде овнинг сайд и все )
Юра
Каскейд алл и орфан ремувал могут случайнгн удалить все записи в таблице
Юра
Будет больно
Пилот
а для удаления через инверсСайд по типу как:
$initiatve->removeQuestionnaire($questionnaire);
$em->flush();
которое возможно только после включения orphanRemoval: true это норм практис?
Пилот
бля правда я чуть пьяненький и не уверен что орфанремувал для этого нужен) но вроде из последних тестов моих, надо было врубить в "он"
Сергей
Ну по сути этот меркур это брокер, симфа туда шлёт сообщения, браузер читает
Ну кажется сам протокол какой то ещё сырой. Без куки, это костыль над этим протоколом в виде подифилла. В репе там ваще что то странное написано, типа не используйте эту библиотеку)
Ещё я помню амбасадор перед меркури обсирался, не умел долгий коннект держать, приходилось костылять. Хотя для того же вебсокета были готовые решения.)
А так да, тоже с ним работали, только на куках. Но не сказать, что прям понравилось) всё из за ощущения сырости
Юра
Орфан ремувал ок, но лучше его не сочетать с каскад all
Юра
Легко можно запутаться и потом все удалится
Пилот
ну мол надо делать так:
$initiative->addQuestionnaire($questionnaire); // saving your aggregate root
и потом вызывать такое внутри метода $initiative->addQuestionnaire() или передавая уже готовый объект:
$questionnaire->assignInitiative($this);
Пилот
выглядит агли код чутка в контексте ддд вроде( правда гонять интерфейсы доктрины и симфы как у Domain\User это implements Symfony\UserIdentity, или Symfony\Uid, или Doctrine\Collection/Doctrine\ArrayCollection
Пилот
но кто парится выделять доктриновские сущности из домена?)
Пилот
шоб там какойта антикорапшн лейрер пилить или чо там как эту проблему можно решить
Юра
А вообще да лучше протверзветь и понять что тебе нужно, удалить сущность или удалить отношение )
Юра
орфан ремувал говорит типо, мне не нужна эта сущность без этого отношения
Юра
Это не всегда то что нужно
Null
Всем привет! На связи команда Podlodka Crew — организатор онлайн-конференций, которые родились из известного IT-подкаста.
Уже 31 октября стартует первый сезон новой конференции Podlodka PHP Crew с темой «Архитектура». Будет полезно и увлекательно 🤓
Наши конференции — это 5 сессионных дней, посвящённых одной узкой теме, которую эксперты раскрывают с разных сторон. Никаких повторяющихся докладов, только уникальные кейсы из личной практики.
Среди спикеров нового сезона Александр Макаров (ASAPIRL), Михаил Мазеин (ManyChat), Павел Лакосников (Авито), Василий Демин (Skyeng), Дмитрий Кириллов (1C-Cтарт) и многие другие.
За 5 дней вместе мы:
✅ Поучаствуем в круглом столе на тему архитектурных best practices на Laravel и Symfony. Узнаем реальные кейсы из проектов разных масштабов — от небольших стартапов до крупного энтерпрайза.
✅ Узнаем, как подбирать оптимальные архитектурные шаблоны, и разберем антипаттерны построения архитектуры.
✅ Выясним, как применять DDD в различных фреймворках, и разберем на практике его имплементацию на примере Symfony и Laravel.
✅ Научимся выстраивать гибкую и поддерживаемую событийную архитектуру, учитывающую семантику PHP.
✅ Узнаем как организовывать код и версионировать API.
✅ Побываем на открытом собеседовании по System Design.
Все подробности сессий уже есть на сайте. С нетерпением ждем вас на борту!
Пилот
Юра
Вообще знаете что бесит. Кругом ДДД, солид, патерны. Приходишь в компанию а там ларавель и лапша на ноде
Юра
Или yii какой-нибудь
Юра
Словно две параллельные вселенные какие-то существуют)
Сергей
Павел
The Ant
Dmitriy
Хорошо ещё если Лара, а то дикий самопис, начинаешь тыкать носом, смотрят непонимающим взглядом
Павел
Ну вообще Лара само по себе в принципе не фи, если писать не через фасады а через dip. Ну и активрекорд борода, потестить что-то будет больно, но никто в обязательном порядке тащить элоквент не заставляет, ну и не все тестят сущности через юниты
Dmitriy
а зачем тогда лара нужна, если начинается такая борьба
The Ant
Павел
Павел
Вот опять таки, архитектура, банальное разделение логики от БД. даже самое примитивное. Можно сделать репозиторий, но опять это разбивается о то, что синхронить сущности в связях через репо неудобно
The Ant
с этими всратыми сущностями из дата маперов гораздо хуже дела обстоят в повседневном использовании )
Dmitriy
ну когда заходишь в класс актив рекорда и видишь там 2к строк, то как бы видимо не тот патерн выбран в проекте
The Ant
вечно какие-то проблемы
Юра
У меня тоже нет проблем
Юра
Видимо у анта свой форк доктрины проблемный какой-то
Павел
The Ant
Хз, вроде нет проблем)
да ну конешьно, элементарно приджойнить какие-нибудь сущности не стандартным способом (по условию)
Павел
Минимум логики, анемика и не пытаться избавиться или абстрагироваться от АР
Павел
Павел
Там есть и критерии, и в join можно указать условие
Dmitriy
разделяй и властвуй, а вот АР тебе этого не даст
Юра
Не знаю я задолбался в ларавеле прописывать везле док коменты например
Юра
Чтобы оно хотл какие-то методы полсвечивало
Павел
для примера
Юра
И даже когша ставишь тип, не все методы есть. Хз почему
Dmitriy
ларка чисто на средненькие crud проекты, не более
Dmitriy
не на yii2 же их писать
Павел
Вроде как раз with для этого, или как то так. Я чет сам слабо понима with vs on в типе соеднинения. Вроде как раз with для доп логики
The Ant
Павел
Главное не забыть eager loading