我正在尝试扩展用作学说实体的类,但由于某种原因,我不断收到错误消息:
表“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;
}
Run Code Online (Sandbox Code Playgroud)
这些二级课程都没有给我带来任何问题。现在,我想扩展这个二级类
/**
* @ORM\Entity()
* @ORM\Table(name="admin_divisions")
*/
class AdminDivision extends LocationProxy
{
}
Run Code Online (Sandbox Code Playgroud)
有了这个
/**
* @ORM\Entity()
* @ORM\Table(name="admin_subdivisions")
*/
class AdminSubDivision extends AdminDivision
{
}
Run Code Online (Sandbox Code Playgroud)
但是,它会产生错误。谁能指出我做错了什么?
这是位置类定义
/**
* @ORM\Entity()
* @ORM\Table(name="locations")
*/
class Location
{
/**
* @ORM\Id
* @ORM\Column(name="location_id", type="integer", options={"unsigned"=true})
*
* @var int
*/
private $id;
}
Run Code Online (Sandbox Code Playgroud)
小智 1
您必须指定继承类型,以便学说知道如何为子类构建表:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#mapped -超类
在这种情况下,您需要将以下注释添加到抽象 LocationProxy 类中:
@ORM\Entity
@ORM\InheritanceType("JOINED")
@ORM\DiscriminatorColumn(name="discr", type="string")
Run Code Online (Sandbox Code Playgroud)
或者选择不同的继承类型
所以整个类将如下所示:
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
*/
abstract class LocationProxy {
/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="De\Gregblog\Receipts\Location", cascade={"ALL"}, fetch="LAZY")
* @ORM\JoinColumn(name="location_id", referencedColumnName="location_id", nullable=false)
*
* @var Location
*/
protected $location;
}
Run Code Online (Sandbox Code Playgroud)