我有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将此字段用作关系?我有几个实体有这样的问题,而其他工作正常。是什么原因?
答案 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
注释,它开始按预期工作。