あなたが探しているのはPartial Referenceと呼ばれるものです。
$item = $em->getPartialReference('Item', 2);
$orderItem = new OrderItem();
$orderItem->setItem($item);
$em->persist($orderItem);
$em->flush();
ただし、何が問題なのかをお読みください。パラグラフを慎重に検討する必要がありますが、代わりに ID で完全なエンティティをクエリする方が安全な場合があります。
getPartialReference() と getReference()
私は元々、forgetbasがリンクしたものも見つけましたが、それが正しい解決策だとは思いません.
これら 2 つの方法はほとんど同じように見え、どちらも公式ドキュメントで参照されています。どちらが最適かを判断する唯一の合理的な方法は、ソース コードgetReference()とgetPartialReference()を直接調べることです。
getPartialReference()
率直に言って、あなたのユースケースと完全に一致するユースケースの明確な説明により、より適切に文書化されていることに気付くでしょう:
* The use-cases for partial references involve maintaining bidirectional associations
* without loading one side of the association or to update an entity without loading it.
コードを調べると、getReferece()
場合によってはデータベース呼び出しが発生することがわかります。
if ($class->subClasses) {
return $this->find($entityName, $sortedId);
}
最後に、getPartialReference()
部分参照を読み取り専用としてマークし、その目的をより適切に定義します。
$this->unitOfWork->markReadOnly($entity);