orm
orm copied to clipboard
[ORM v1] ORM постоянно пытается обновить date/datetime поля
- Сделать выборку записей, у которых есть поле с датой. Например, дата рождения (без времени) и дата создания записи. Причем выборку можно делать как через связь (BelongsTo) так и напрямую из репозитория, без разницы.
- Затем попробовать изменить любые другие побочные сущности и запустить транзакцию. ОРМ считает, что надо всегда обновлять поля с датами.
- В консоли включить максимальный verbose.
Пример кода:
class Bar
{
#[Cycle\Relation\HasMany(target: Foo::class)]
private Collection $foos;
public function __construct()
{
$this->foos = new ArrayCollection();
}
public function getFoos(): Collection
{
return $this->foos;
}
}
class Foo
{
#[Cycle\Relation\BelongsTo(target: Post::class)]
private Post $post;
public function setPost(Post $post): void
{
$this->post = $post;;
}
}
$user = $userRepository->findByPK($id);
$posts = $user->getPosts(); // `created_at`, `birthday` или `published_at`. Не суть, главное, что поле не меняется и не в маппере
$bar = new Bar();
$bar->setAcme('Value')
foreach($posts as $post) {
$foo = new Foo();
$foo->setPost($post);
$foo->setSomething(1);
$bar->getFoos()->add($bar); // getFoos() это Doctrine Collection.
}
$this->transaction->persist($bar);
$this->transaction->run();
P.S. created_at создан через маппер, а birthday обычным способом. Он обновляет оба поля, то есть это не проблема в мапперах (которые 1-в-1 скопированы из документации).
Версия 1.8.0, PHP 8.1
в БД эти поля именно как Date, а не Datetime? В сущности это объект DatetimeInterface?