教义2的关系不起作用

时间:2014-05-08 00:48:37

标签: php doctrine-orm zend-framework2

我有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;
...
}

单位实体:

/**
 * 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将此字段用作关系?我有几个实体有这样的问题,而其他工作正常。是什么原因?

1 个答案:

答案 0 :(得分:0)

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注释,它开始按预期工作。