原则二的关系不起作用


Doctrine 2 relationship is not working

我有Item实体:

/**
 * Item
 *
 * @ORM'Table(name="item")
 * @ORM'Entity
 */
class Item {
...
    /**
     * @var Unit
     * @ORM'Column(name="unitId", type="integer")
     * @ORM'ManyToOne(targetEntity="Unit", inversedBy="items")
     * @ORM'JoinColumn(name="unitId", referencedColumnName="id")
     */
    private $unit;
...
}

And Unit entity:

/**
 * Unit
 *
 * @ORM'Table(name="unit")
 * @ORM'Entity
 */
class Unit {
...
    /**
     * @var Item[]
     * @ORM'OneToMany(targetEntity="Item", mappedBy="unit")
     */
    private $items;
...
}

和像

这样的代码
$item = $this->objectManager->getRepository('Application'Main'Entity'Item')->find($id);
$unitName = $item->getUnit()->getName();

产生错误Fatal error: Call to a member function getName() on a non-object,这意味着doctrine将此字段作为简单字段处理,而不是关系字段。我该怎么做才能迫使Doctrine使用这个字段作为关系?我有几个实体有这样的问题,而其他的工作很好。原因是什么?

vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDrive.php,第262-263行:

// Field can only be annotated with one of:
// @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany

因此,在使用@Column时似乎不能使用关系注释,反之亦然。我不得不删除@Column注释并添加@JoinColumn注释,它开始按预期工作。