エンティティを挿入するときは、次のように言います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 で 2 つのクエリを確認できます。
INSERT INTO Article ...
UPDATE user set created="..." WHERE id = 1
ユーザーが複数の OneToMany 関係である場合、それらのそれぞれも更新されます。Doctrine
ユーザーエンティティが変更されていないことを知っているので、なぜこれらの更新を実行しているのかわかりません。さらに、更新されるのは作成された (datetime) オブジェクトのみで、他のフィールドは更新されません。
私はカスケード設定をしていないので、Article persist() で何かをトリガーするべきではありません。
誰?