【发布时间】:2016-04-08 16:16:32
【问题描述】:
我正在尝试扩展一个用作学说实体的类,但由于某种原因,我不断收到错误消息:
表 'admin_subdivisions' 上没有名为 'location_id' 的列
当我说扩展时,我的意思是 php 级别而不是数据库级别。我只是想创建另一个带有额外列的表。我有几个实体扩展了以下抽象类
abstract class LocationProxy
{
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="Location", cascade={"ALL"}, fetch="LAZY")
* @ORM\JoinColumn(name="location_id", referencedColumnName="location_id", nullable=false)
*
* @var Location
*/
protected $location;
}
这些二级课程都没有给我带来任何问题。现在,我想扩展这个二级类
/**
* @ORM\Entity()
* @ORM\Table(name="admin_divisions")
*/
class AdminDivision extends LocationProxy
{
}
有了这个
/**
* @ORM\Entity()
* @ORM\Table(name="admin_subdivisions")
*/
class AdminSubDivision extends AdminDivision
{
}
但是,它会产生错误。谁能指出我做错了什么?
这是 Location 类的定义
/**
* @ORM\Entity()
* @ORM\Table(name="locations")
*/
class Location
{
/**
* @ORM\Id
* @ORM\Column(name="location_id", type="integer", options={"unsigned"=true})
*
* @var int
*/
private $id;
}
【问题讨论】:
-
你的
joinColumn的referencedColumnName是不是Location实体的主键? -
@chalasr,是的,并将其添加到操作中。我通过创建一个额外的
abstract Admin类,然后从该类扩展AdminDivision和AdminSubDivision来实现它。但是我还是想知道为什么上面的代码行不通。 -
对不起,我不明白为什么,希望别人能给它,如果没有人,我会在我这边尝试。另一种解决方法是使用一个特征并在您的两个类中使用它,顺便说一句,使这些类能够扩展另一个类,同时保留
$location属性。
标签: php doctrine-orm