Doctrine2 OneToMany关系在同一请求中为null

时间:2016-05-05 09:14:56

标签: orm doctrine-orm symfony

所以我有以下映射:

Order实体

/**
 * Order
 *
 * @ORM\Table(name="`order`")
 * @ORM\Entity
 */
class Order
{
    /**
     * @var integer
     *
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    // ... //

    /**
     * @ORM\OneToMany(targetEntity="OrderItem", mappedBy="order")
     */
    private $items;

    // ... //

OrderItem实体

 /**
 * OrderItem
 *
 * @ORM\Table(name="order_item")
 * @ORM\Entity
 */
class OrderItem
{
    /**
     * @var integer
     *
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    // ... //

    /**
     * @ORM\ManyToOne(targetEntity="Order", inversedBy="items")
     * @ORM\JoinColumn(referencedColumnName="id")
     */
    private $order;

    // ... //

我遇到的问题是,当我在刷新后尝试转储$order->getItems()时,它仍然是NULL。使用正确的ID将Eveything正确插入到数据库中,当我尝试在NEXT请求中获取订单时,它确实包含$order->getItems()中的项目,所以毫无疑问它确实有效。

但它不起作用(给NULL)相同的请求。

请看下面的代码:

    $manager = $this->getDoctrine()->getManager();

    $order = new Order();
    $orderItem = new OrderItem();
    $orderItem
            ->setOrder($order)
    ;

    $manager->persist($order);
    $manager->persist($orderItem);

    dump($order->getItems()); // returns NULL
    // but in the next request it will contain items

那么如何才能在同一个请求中获取这些项目?我需要生成订单并返回项目......任何想法?

1 个答案:

答案 0 :(得分:1)

在班级 OrderItem 中,也许吧。

public setOrder(Order $order)
{
    $order->addItem($this);
    $this->ordder = $order;
}