
Андрей
20.08.2017
08:56:53
Апдейты при локах в БД приведут к pdo exception в приложении и к закрытию EntityManager.
Можно использовать filesystem read lock в качестве альтернативы

Sergey
20.08.2017
09:29:49

Google

Sergey
20.08.2017
09:30:41
ну либо ты этот самый save в том же контроллере делаешь
тогда как бы ок но в этом нет смысла

Roman
20.08.2017
09:34:34
Хорошая идея

Sergey
20.08.2017
09:34:57

Aleh
20.08.2017
09:35:05

Roman
20.08.2017
09:35:07
Почему?

Sergey
20.08.2017
09:35:20
у тебя если сущность ты достал и она уже крутится в unit of work (managed entity) то она уже там
это если ты не менял настройки конечно

Roman
20.08.2017
09:35:30
А если вы решите на натив перейти?

Sergey
20.08.2017
09:35:39

Roman
20.08.2017
09:35:45
Я знаю, что сущность уже в менеджере

Aleh
20.08.2017
09:35:48
Почему?
https://www.slideshare.net/mobile/Yaboomaster1/save-repository-from-save

Google

Sergey
20.08.2017
09:35:58
да и потом

Roman
20.08.2017
09:36:02
Спасибо, почитаю)

Sergey
20.08.2017
09:36:18
да, это не сложно

Aleh
20.08.2017
09:36:22
Эти 100 строк будеи просто впадлу писать

Sergey
20.08.2017
09:36:39
Возьми готовый)
я пробовал - не нашел. Это как менять доктрину на любую другую ORM с UoW

Roman
20.08.2017
09:36:57
Короче в репозиторий только метод add добавлять и все

Sergey
20.08.2017
09:37:02
да
у меня другой вопрос - у тебя реально были прицеденты когда ты отказывался от Doctrine?)=

Aleh
20.08.2017
09:37:28
И remove/find

Roman
20.08.2017
09:37:37
Ну просто может быть такая ситуация, где некоторые репозитории прийдется реализовать нативно, без доктрины. Для перфоманса
Не было)

Sergey
20.08.2017
09:37:47
remove только если надо, я сейчас придерживаюсь того что бы remove почти никогда небыло

Roman
20.08.2017
09:37:55
Я понимаю что это маловероятно, но для долгих проектов вероятно

Sergey
20.08.2017
09:38:23
тут если у тебя проект будет чувствителен к лэтенси
и именно на запись

Roman
20.08.2017
09:38:35
Ну да, согласен

Sergey
20.08.2017
09:38:38
это настолько маловероятно, что прям ух

Aleh
20.08.2017
09:38:52

Google

Sergey
20.08.2017
09:39:21

Aleh
20.08.2017
09:39:37

Sergey
20.08.2017
09:39:51
не, я мол с точки зрения бизнеса, знаешь ли ты что тебе можно это дело удалять?
из моего опыта крайне редко надо именно удалять

Roman
20.08.2017
09:40:15
+

Sergey
20.08.2017
09:40:28
"архивация" и т.д. намного более распространенная вещь, ибо никогда не знаешь когда тебе пригодятся удаленные данные

Roman
20.08.2017
09:40:35
Ребята, хотел спросить, вы cascade=persist юзаете?

Sergey
20.08.2017
09:40:41
да, юзаем
причем активно

Aleh
20.08.2017
09:41:38

Sergey
20.08.2017
09:42:04
я хочу попробовать prooph
вот к слову вопрос на тему аргегатов и event sourcing

Sergey
20.08.2017
09:42:28
допустим у тебя есть сущность и тебе нужны комменты например
я сейчас делаю корнем агрегата комментируемую сущность и прошу через нее комменты оставлять. Типа там бизнес логика можно тебе или нельзя давать фидбэк и т.д.
пересчет рэйтингов

Roman
20.08.2017
09:43:09
Глупый вопрос, но вы действительно Сергей Протько?)))

Sergey
20.08.2017
09:43:38
@mkusher короч хз как с es это делать... количество объектов может быть приличным. Или лучше не делать подобного таким образом?

Aleh
20.08.2017
10:08:23

Roman
20.08.2017
10:10:45

Google

Aleh
20.08.2017
10:10:59

Roman
20.08.2017
10:48:54
@fes0r @mkusher мне интересно вот ваше мнение:
Проект на Ларавел, юзаю доктрину. Разделил на модули. Допустим, модуль User. Создал класс UserManager, который отвечает за создание, просмотр и редактирование пользователей.
В него я инжектю репозиторий и через него достаю юзеров, создаю и так далее. Но мне кажется, что я не правильно делаю, так как после разговора выше, понял, что надо флашить уже в контроллере, а я это делаю в репозитории.
Как вариант, инжектить и UserManager, и EntityManager в контроллер, и после того, как UserManager сделает все свои дела по созданию юзера и добавит его в репозиторий через add(), вызвать флаш.
Был бы благодарен за ваши комментарии.

Aleh
20.08.2017
10:50:04
а зачем вам UserManager?

Roman
20.08.2017
10:52:32
Для создания объекта, редактирования и read-функций

Admin
ERROR: S client not available

Roman
20.08.2017
10:53:18
Под созданием и редактированием подразумеваю не только добавить в репо, но и сопутствующие поверки/валидация, связанные с бизнес-логикой
Может название не лучшее, но на данный момент вот так

Aleh
20.08.2017
10:54:50


dypa
20.08.2017
10:55:15
@fes0r @mkusher мне интересно вот ваше мнение:
Проект на Ларавел, юзаю доктрину. Разделил на модули. Допустим, модуль User. Создал класс UserManager, который отвечает за создание, просмотр и редактирование пользователей.
В него я инжектю репозиторий и через него достаю юзеров, создаю и так далее. Но мне кажется, что я не правильно делаю, так как после разговора выше, понял, что надо флашить уже в контроллере, а я это делаю в репозитории.
Как вариант, инжектить и UserManager, и EntityManager в контроллер, и после того, как UserManager сделает все свои дела по созданию юзера и добавит его в репозиторий через add(), вызвать флаш.
Был бы благодарен за ваши комментарии.
похоже дело в то, что ты пытаешься использовать data mapper как active record
у тебя может быть ситуация ты например создаешь пользователя и партнерский купон для этого пользователя. сохранение данных в субд будет происходить единовременно для пользователя и купона в рамках одной транзакции если flush будет в теле метода контроллера
репозитории стоит использовать для сложной логики получения или обработки данных которые находятся в СУБД


Roman
20.08.2017
11:00:04
dypa да, за флаш я понял уже, его в контролёре запускать)

dypa
20.08.2017
11:00:54
кто вас научил писать "за"?!

Aleh
20.08.2017
11:01:08
ну вообще да

Roman
20.08.2017
11:05:02

dypa
20.08.2017
11:05:50
вот и я не понимаю откуда в русском языке взялось "за"

Roman
20.08.2017
11:06:48
Косяки обучения :/
ну вообще да
А в данном случае User - это как своего сервис получается? Или модель, так сказать?

Aleh
20.08.2017
11:09:11

Google

Roman
20.08.2017
11:13:28
@mkusher Угу, я понял вас. То есть создание и редактирование мы инкапсулируем в сущность User, в контроллер инжектим репозиторий и созданную сущность добавляем через репо.
Причина, по которой я сделал менеджера, это из-за готовых контролеров админки, хотел облегчить высокую вероятность перехода на другую админку
@mkusher можно ещё совет один, пожалуйста: валидацию данных, которые идут в сущность, например в User::register($data), лучше делать до того, как вызывается метод регистрации, то есть в контроллере или в request объекте, или в самой сущности держать правила валидации.

Aleh
20.08.2017
11:20:18
Там особо нечего валидировать


Roquie
20.08.2017
11:43:55
Ребят тут такая проблема нарисовалась, когда начал приводить всю систему в тестируемый вид. Подскажите, как можно выкрутиться, глаз уже замылен.
Проект имеет несколько ролей и штук пять таблиц у которых есть user_id. В зависимости от того, какой юзер вошел надо либо ограничить выборку по всем таблицам только по этому юзеру, либо ограничить по списку пользователей ему доступных. Ладно уж, ограничение выборки можно пропихнуть в Criteria, но как быть с апдейтом и удалением: как добавить условия к апдейту (and where user_id = 1) и к удалению, чтобы юзер с лоу-левел правами не смог обновить запись которая ему не принадлежит (подменив её id)?
Пока вижу только одно хреновое решение - для подобных репозиториев написать трейт, который будет ограничивать выборку в зависимости от роли. Но черт побери, подкоркой понимаю, что не должна там быть проверка на права доступа. Логика разбрасывается по всему проекту.
Что делать, как быть, кому молиться? :)
Вот такая штука должна быть глобальна для всего проекта.
https://gist.github.com/roquie/4b78e4bf11488bb09ec01701bb11bd51
Или это дичайший говнокод и надо как-то иначе решить эту проблему?


dypa
20.08.2017
12:11:45
в doctrine сделано так http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/filters.html

Roquie
20.08.2017
12:13:32
Я уже и так думаю выкинуть eloquent и переписать с доктриной это добро, останавливает только объем кода

Maksim (Ellrion)
20.08.2017
12:29:09
И чем по сути доктриновский фильтр отличается от ларовского глобалскоупа?

Roquie
20.08.2017
12:31:50
глобал скоуп лары не подойдет, потому что при ограничении выборки как у меня выше, будет зацикливание (было по крайней мере) для User модели, поэтому поверх Eloquent нахерачили слой репозиториев, со своим скоупингом.

Roman
20.08.2017
12:54:47

Sergey
20.08.2017
12:55:30
фильтры там нужны для таких механизмов внутренних как наследование таблиц к примеру