0

エンティティを挿入するときは、次のように言います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() で何かをトリガーするべきではありません。

誰?

4

1 に答える 1

0

created_at 列の注釈は何ですか? User クラスまたは BaseUser のどこかに @PreUpdate アノテーションがありますか?

また; 同じことを試みますが、$em->merge($user) は使用しません。私はそれを使用したことがなく、何に使用されるのかさえ知りませんが、それが問題かもしれません.

于 2013-05-09T11:20:43.010 に答える