我有许多实体从一个父实体扩展。
我想从其中一个中删除一个或多个列,同时保留继承
我试图通过将父实体映射为MappedSuperClass
来找到解决方案,但它没有帮助。
示例:
<?php
/** @ORM\Entity */
class Base
{
/** @ORMColumn(name="foo", type="string") */
protected $foo;
/** @ORMColumn(name="bar", type="string") */
protected $bar
}
/**
* @ORM\Entity
*/
class Child extends Base
{
// How take only the Base::$bar column mapping
// and not the Base::$foo column mapping
}
学说文档的整个Inheritance mapping章节并没有给我任何替代方案。
我需要真正删除/排除数据库中的列,序列化并不能解决我的问题。
有没有办法实现这个目标?
答案 0 :(得分:2)
PHP不允许通过继承来删除类的功能,它只是被制作并被认为处理相反的事情。
请参阅http://php.net/manual/en/language.oop5.inheritance.php
您可以使用traits和refactor inheritance:
<?php
trait BaseFooTrait
{
/** @ORM\Column(name="foo", type="string") */
protected $foo;
// ... getter and setter
}
/**
* @ORM\Entity
*/
class Base
{
/** @ORM\Column(name="bar", type="string") */
protected $bar;
// ... getter and setter
}
/**
* @ORM\Entity
*/
class FooBase extends Base
{
use BaseFooTrait;
}
=&GT;延长Base
您没有foo
。
答案 1 :(得分:2)
您无法有选择地继承实体类的某些部分。听起来你需要重构你的Base类,或者根据你的其他类在彼此之间共享的属性引入另一个抽象类。
即
/**
* @MappedSuperclass
*/
class Base
{
/** @ORMColumn(name="foo", type="string") */
private $foo;
}
/**
* @MappedSuperclass
*/
class SomeOtherBase extends Base
{
/** @ORMColumn(name="bar", type="string") */
private $bar
}
/**
* @ORM\Entity
*/
class Child extends Base
{
// How take only the Base::$bar column mapping
// and not the Base::$foo column mapping
}