我有一个如下定义继承的实体:
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"text" = "TextAttribute", "boolean" = "BooleanAttribute", "numeric" = "NumericAttribute", "date" = "DateAttribute"})
我想知道有没有可能为字段'type‘设置getter?我知道我可以使用instanceof (在大多数情况下,这就是我正在做的),但在一些场景中,$item->getType()会让我的工作变得如此轻松。
发布于 2010-12-27 16:23:33
扩展beberlei所说的,你可以在属性类中声明一些常量,以及一个抽象的getType()
函数。然后,在每个派生属性类中重载它。
类似于:
abstract class Attribute {
const TYPE_BOOL = 0;
const TYPE_INT = 1;
...
abstract public function getType();
}
class BooleanAttribute extends Attribute {
public function getType() {
return parent::TYPE_BOOL;
}
}
发布于 2014-02-11 19:45:16
这就是我要做的。
首先,您创建了一个AttributeInterface
,以确保将来所有的新属性类型都将实现need方法:
interface AttributeInterface
{
/**
* Return the attribute type
*/
public function getType();
}
然后创建实现AttributeInterface
接口的Attribute
抽象类。
在@DiscrimatorMap
调用中使用常量以保持一定的一致性
/**
* Attribute
* ...
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({Attribute::TYPE_TEXT = "TextAttribute", Attribute::TYPE_BOOLEAN = "BooleanAttribute", Attribute::TYPE_NUMERIC = "NumericAttribute", Attribute::TYPE_DATE = "DateAttribute"})
*/
abstract class Attribute implements AttributeInterface
{
const TYPE_TEXT = 'text';
const TYPE_BOOLEAN = 'boolean';
const TYPE_NUMERIC = 'numeric';
const TYPE_DATE = 'date';
}
最后,创建所有需要的类,扩展Attribute
类并实现getType()
方法
/**
* TextAttribute
*
* @ORM\Entity
*/
class TextAttribute extends Attribute
{
public function getType()
{
return $this::TYPE_TEXT;
}
}
/**
* BooleanAttribute
*
* @ORM\Entity
*/
class BooleanAttribute extends Attribute
{
public function getType()
{
return $this::TYPE_BOOLEAN;
}
}
/**
* NumericAttribute
*
* @ORM\Entity
*/
class NumericAttribute extends Attribute
{
public function getType()
{
return $this::TYPE_NUMERIC;
}
}
/**
* DateAttribute
*
* @ORM\Entity
*/
class DateAttribute extends Attribute
{
public function getType()
{
return $this::TYPE_DATE;
}
}
// And so on...
发布于 2014-01-09 21:15:31
既可以使用EntityManager,也可以使用DocumentManager。
$documentManager->getClassMetadata(get_class($entity))->discriminatorValue;
https://stackoverflow.com/questions/4450381
复制相似问题