関連付けのあるエンティティを挿入する必要があります。
関連するエンティティのFKがすでにある場合、FKだけが入力された状態でプライマリエンティティをデータベースに挿入する方法はありますか?
それとも私はいつもしなければなりませんか
参照プロキシ が必要です
投稿とタグがあるとしましょう。投稿には多くのタグがあります。たくさんのチェックボックスをチェックしたユーザーからたくさんのタグを受け取ります。
以下では、最初に各タグエンティティをフェッチせずに、既存の投稿にタグを追加します。これは、EntityManager::getReference()
によって生成された参照プロキシを使用して行われます。
$tag_ids = $_POST['tag_id']; // an array of integers representing tag IDs.
$post = $em->getRepository('Post')->find($post_id); // returns a Post entity.
foreach($tags_ids as $tid){
$post->addTag($em->getReference('Tag',$tid));
}
$em->persist($post);
$em->flush();
参照プロキシの使用に関して
私の調査では、これは次のように部分的にしか解決策ではありません。
はい、(プロキシレコードを作成するため)関連レコードを事前に取得する必要はありませんが、更新トランザクションをフラッシュ(コミット)すると、最初にselectステートメントを実行して関連レコードを取得し、次に実行するだけです。更新(データベースへのオールインワンヒット)。
これは非効率的であり、必要ではないはずです(外部キーIDがあるのに、なぜレコードを取得するのですか?)
したがって、完全なソリューションではありませんが、データベースへの単一の接続(これは良いことです)とわずかに単純化されたコードだけが得られます。
現時点でこれに対する解決策があるかどうかはわかりません... ??
うまくいけば、doctrine bodsは将来更新され、プロキシロジックを使用する場合は、自動的にパフォーマンスが向上するはずです...
関連するエンティティを取得して、関係を作成する必要があります。
私はあなたがcould DBALレイヤーを介してデータベースに直接アクセスすることによって手動で関係を指定すると仮定しますが、これはお勧めしませんし、試したこともありません。