Size: a a a

2021 August 20

АС

Александр Семикашев... in symfony
Я заметил, что при обновлении записи в базе, всегда "исполняется" preUpdate даже если данные не менялись. Глянул что там  в getEntityChangeSet. Оказалось что "меняются" даты.

В doctrine сущности поле типа datetime

/**
* @ORM\Column(type="datetime", nullable=true)
 */

Мне нужно использовать Carbon, поэтому в конфиге у меня:

types:
 datetime_immutable: \Carbon\Doctrine\DateTimeImmutableType
 datetime: \Carbon\Doctrine\DateTimeType

Вроде бы всё логично и сделано как в документации, но в getEntityChangeSet, как уже говорил ранее меняются даты (приложил скрин). То есть фактически дата не меняется, но doctrine видимо считается что объекты разные.

Мне кажется что такого быть не должно, либо я чего-то не понимаю. В репозитории доктрины ничего не нашёл по этому поводу, может быть кто-нибудь сталкивался или подскажет, может быть я что не так понял.
источник

ЕК

Евгений Котов... in symfony
ага
и пустого упд быть не может, нет ссылок на доки - нет упд
источник

✨Basic_Instinct✨ in symfony
я не успеваю читать, как уже отредатировал))
источник

✨Basic_Instinct✨ in symfony
про рич мы не рассматриваем даже, при ситуации если нужны новые доки, никак не похожими на предыдущие, ты создаешь новую сущность, и создать новую связь, и опять же масло масляное
источник

SB

Sergei Baikin in symfony
Так упд не существет как такового
То что вы говорите не существет это не принимает участия в процессах системы. Это не налагает требования ему не существоать в системе.
Вам его использовать в процессах нельзя.
Вот в тех процессах где есть такое условие и берите в работу только УДП которые имеют документы
источник

SB

Sergei Baikin in symfony
в чем масло?
Надо новую доюавил код
Надо удалисть старую удалил код

Но главное НЕ МЕНЯЛ код
источник

✨Basic_Instinct✨ in symfony
какой именно код мы меняем? мы добавляем в существующий
источник

SB

Sergei Baikin in symfony
Если уна анемик то и доктрины и прочий бред нам не нужен. Там впринципе пофиг как делать. Как в базе удобнее так и вперед. Обычный  TransactionScript с TableDataGateway
источник

✨Basic_Instinct✨ in symfony
новая дока - новый код, куда его не впиши
источник

SB

Sergei Baikin in symfony
https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle

Extension vs modification
Так понятнее что я имею ввиду?
источник

✨Basic_Instinct✨ in symfony
в унп ты создашь тоько новую связь на новый док, и весь код будет нацелен на работу с новым доком в классе (сервисе) с новой докой
источник

SB

Sergei Baikin in symfony
мы потрогали старый код покрытый тестами и работающий в проде === увеличили шанс багов и регресий
источник

✨Basic_Instinct✨ in symfony
т.е. на все связи создаешь mtm связи?
источник

ЕК

Евгений Котов... in symfony
короч я считаю что раз уж суть упд - это "контейнер" для доков, то айди упд - это и есть ссылки на доки
т.е. их место внутри упд
источник

SB

Sergei Baikin in symfony
я вообще связи в базе не использую
И связи между обектами
ТОлько  айдишники внутри моделей
источник

SB

Sergei Baikin in symfony
источник

✨Basic_Instinct✨ in symfony
упд не может существовать без дока, на тебя в таком случае возлагается контроль консистентности
источник

✨Basic_Instinct✨ in symfony
а это чревато... Мы не машина
источник

SB

Sergei Baikin in symfony
Так котролить не вы должны а код
Как и в базе это просто код

ПРосто вы говорите что не можете писать код гарантирующий консистеность
Это нормально тогда да лучше положится на базу где более умные люди с этим справились
источник

SB

Sergei Baikin in symfony
Еще раз мыпо разному смотримм на условия
Я не услышал что он не может сущестовать
Я услышал что он не может принимать участие в каком то процессе

Вы же сами про ДДД говорите. Где в реальном бизнесе или мире мгновенное создание документов или удп вы видели? После того как что то сделано оно может быть с ошибками и удалено. Или дополненно и отправленно дальше
источник