엔티티를 삽입 할 때, article
가정 해 봅시다 :병합 된 엔티티가 삽입시 왜 업데이트됩니까?
Article::id
Article::text
Article::author -> User
기사는 저자가 (ManyToOne)
User::id
User::name
User::created
내가 엔티티 관리자 사용하여 데이터베이스에서 사용자를 가져 오는 경우 :
$user = $em->find(1);
$article = new Article();
$article->text = "balh blah";
$article->user = $user;
$em->persist($article);
$em->flush();
을
데이터베이스에 올바른 삽입 만 있습니다. 내가 세션에 저장 (또는 캐시)하는 사용자를 사용하는 경우
INSERT INTO Article ...
지금 :
$user = $cache->find(1);
$user = $em->merge($user);
$article = new Article();
$article->text = "balh blah";
$article->user = $user;
$em->persist($article);
$em->flush();
나는 MySQL의에서이 쿼리를 볼 수 있습니다
INSERT INTO Article ...
UPDATE user set created="..." WHERE id = 1
와 같은 사용자의 경우 더 OneToMany 관계, 그들 중 하나가 너무 업데이 트됩니다. 사용자 엔티티가 변경되지 않았다는 것을 알고 있다면 Doctrine
이 그 업데이트를 수행하는 이유를 이해할 수 없습니다. 또한 생성 된 (datetime) 개체 만 업데이트되며 다른 필드는 업데이트되지 않습니다.
카스 케이드 설정이 없으므로 조항 persist()에서 아무 것도 트리거하지 않아야합니다.
누구나?
사용자 또는 조항에 수명주기 또는 사전 업데이트 방법이 없습니다. 생성 된 필드에 대한 주석은 기본 @ORM \ Column (name = "created", type = "datetime", nullable = false)'입니다. 사용자 엔티티가 캐시에 저장되고 연관이 완료되기 전에 entityManager가 이에 대해 알아야하기 때문에 병합을 사용해야합니다. – maxwell2022