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