Size: a a a

2021 January 14

JB

Jurij Bachkov in symfony
Это мало вероятно
источник

D

Dmitry in symfony
это ооочень вероятно, покупка одного и того же товара одновременно это прям легко легко и очень часто
источник

D

Dmitry in symfony
и если у вас архитектура такая что обновление количества носков делается сразу же, то версионирование создает проблему в данном случае
источник

D

Dmitry in symfony
и не будем сейча обсуждать что такие вещи можно решить по-другому изменяя бизнес требования
знаю :)
источник

JB

Jurij Bachkov in symfony
Тогда делай сервис - счетчик носков
Уходи на DBAL
источник

s

s4b0t in symfony
Версионирование можно добавить всему объекту? или обязательно выносить баланс в отдельную сущьность и добавлять версионирование только к балансу?
источник

D

Dmitry in symfony
s4b0t
Версионирование можно добавить всему объекту? или обязательно выносить баланс в отдельную сущьность и добавлять версионирование только к балансу?
версионирование у сущности, любой
источник

D

Dmitry in symfony
это называется оптимистеческая блокировка, там выше дали доку на эту тему
источник

D

Dmitry in symfony
Jurij Bachkov
Тогда делай сервис - счетчик носков
Уходи на DBAL
что не поможет, потому как все равно будет конкаренси и если применять версионирование, без обработки ошибок, то все равно когда-ниубдь получим отлуп
источник

JB

Jurij Bachkov in symfony
В смысле? Я предлагаю читать счетчик не из UoW а прямо из базы - и прямо в базе изменять
источник

D

Dmitry in symfony
а, извиняюсь
ну тогда мы приходим опять же с чего начали. костылить через DBAL и обновлять UoW
источник

JB

Jurij Bachkov in symfony
Не надо обновлять UoW
Ты показание счетчика берешь не из entity - а из сервиса, который работает на уровне DBAL
источник

D

Dmitry in symfony
допустим, но это все должно быть в одной транзакции, а значит все равно нужно ручками это все дело обрабатывать, ошибки, открывать транзакции и тп
и мы опять пришли к тому что я говорил выше
тут нет простого способа
источник

SP

Sergey Protko in symfony
Dmitry
не там выхода нормального, вообще
единственный выход это руками открывать транзакцию в базу, обновлять данные
обновлять сущность, дальше с ней работать, а потом руками закрывать транзакцию
Вот не оч понятно что тут не так.
источник

SP

Sergey Protko in symfony
Ну мол... Это даже не кастыль
источник

D

Dmitry in symfony
имхо это костыль выходит, но от него никуда не деться
источник

D

Dmitry in symfony
либо не юзать доктрину, либо заворачивать такие вот вещи куда-то и юзать красивый интерфейс вида User->updateBalance
источник

SP

Sergey Protko in symfony
Лень все читать. Типа есть счётчик в сущности и хочешь его атомарно через dbal менять а потом он тебе нужен в сущности?
источник

D

Dmitry in symfony
Sergey Protko
Лень все читать. Типа есть счётчик в сущности и хочешь его атомарно через dbal менять а потом он тебе нужен в сущности?
ну очень грубо говоря да, баланс там у автора был
источник

AK

Aleksei Kuznetsov in symfony
Sergey Protko
Лень все читать. Типа есть счётчик в сущности и хочешь его атомарно через dbal менять а потом он тебе нужен в сущности?
да.

есть три шага:
1. читаем сущность
2. обновляем какое-то инт-поле
3. работаем дальше

обновлять поле в сущности не обязательно.
т.е. не факт, что оно будет дальше по коду использоваться... но никто не застрахован.

сущность и поле не имеет значение.
может быть какой-то баланс, может быть счетчик, может быть количество.
что-то такое, что одновременно могут обновить параллельные запросы.
источник