3

この投稿に基づく:外部キー ID #sf2 #doctrine2 の ID を設定する方法

前の投稿で、私はこの解決策を見つけました

class Item
{
/**
 * @ORM\ManyToOne(targetEntity="MyBundle\Entity\ItemType", inversedBy="itemTypes")
 * @ORM\JoinColumn(name="type_id", referencedColumnName="id")
 */
protected $item_type;
/**
 * 
 * @var string $item_type_id
 * @ORM\Column(type="integer")
 */
protected $item_type_id;
}
.... Setter & Getter
}

それは私がそのようなことをすることを可能にします

$item = new Item();
$item->setItemTypeId(2); // Assuming that the ItemType with id 2 exists.

しかし、doctrine2.3 の最後の更新から、もう機能しません。

アイテムを永続化すると(INSERT SQLクエリを作成するため)、item_type_idフィールドが設定されません。他のすべてのフィールドのみ。

設定する直前に ItemType を取得せずに item_type_id を手動で設定する方法はありますか? クエリの使いすぎです!?

$item = new Item();
$itemType = $this->entity_manager->getRepository('Acme\MyBundle:ItemType')->find(2);
$item->setItemType($itemType); // Assuming that the ItemType with id 2 exists.
4

1 に答える 1

12

この問題の解決策を見つけました。

ORM を使用しているため、通常は要素の識別子を使用せず、オブジェクト自体を操作します。

ただし、オブジェクトの代わりにオブジェクト ID を使用すると便利な場合があります。たとえば、セッションに識別子を格納する場合です (例: user_id、site_id、current_process_id など)。

このような状況では、プロキシを使用する必要があります。詳細については、Doctrine のドキュメントを参照してください: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/advanced-configuration.html #参照プロキシ

この例では、次のようになります。

$itemTypeId = 2; // i.e. a valid identifier for ItemType
$itemType = $em->getReference('MyProject\Model\ItemType', $itemTypeId);
$item->setItemType($itemType);

それが他の人を助けることを願っています。

于 2012-10-08T18:16:27.277 に答える