加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在doctrine中扩展实体类

发布时间:2020-12-13 22:26:12 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试扩展一个用作教义实体的类,但由于某种原因我不断收到错误: There is no column with name ‘location_id’ on table ‘admin_subdivisions’ 当我说扩展时,我的意思是在PHP级别而不是数据库级别.我只是想创建另一个表,带有一个额外的列.我有几个
我正在尝试扩展一个用作教义实体的类,但由于某种原因我不断收到错误:

There is no column with name ‘location_id’ on table ‘admin_subdivisions’

当我说扩展时,我的意思是在PHP级别而不是数据库级别.我只是想创建另一个表,带有一个额外的列.我有几个实体扩展了以下抽象类

abstract class LocationProxy
{
    /**
     * @ORMId
     * @ORMOneToOne(targetEntity="Location",cascade={"ALL"},fetch="LAZY")
     * @ORMJoinColumn(name="location_id",referencedColumnName="location_id",nullable=false)
     * 
     * @var Location
     */
    protected $location;
}

这些二级课程都没有给我任何问题.现在,我想扩展这个二级课程

/**
 * @ORMEntity()
 * @ORMTable(name="admin_divisions")
 */
class AdminDivision extends LocationProxy
{
}

有了这个

/**
 * @ORMEntity()
 * @ORMTable(name="admin_subdivisions")
 */
class AdminSubDivision extends AdminDivision
{
}

但是,它会产生错误.谁能指出我做错了什么?

这是Location类定义

/**
 * @ORMEntity()
 * @ORMTable(name="locations")
 */
class Location
{
    /**
     * @ORMId
     * @ORMColumn(name="location_id",type="integer",options={"unsigned"=true})
     * 
     * @var int
     */
    private $id;
}

解决方法

您必须指定继承类型,以便doctrine知道如何为子类构建表: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#mapped-superclasses

在这种情况下,您需要将以下注释添加到抽象LocationProxy类:

@ORMEntity
 @ORMInheritanceType("JOINED")
 @ORMDiscriminatorColumn(name="discr",type="string")

或者选择不同的继承类型

所以整个班级看起来像这样:

/**
 * @ORMEntity
 * @ORMInheritanceType("JOINED")
 * @ORMDiscriminatorColumn(name="discr",type="string")
 */
abstract class LocationProxy {
    /**
     * @ORMId
     * @ORMOneToOne(targetEntity="DeGregblogReceiptsLocation",nullable=false)
     * 
     * @var Location
     */
    protected $location;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读