首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在doctrine2中访问php中的鉴别器字段吗?

我可以在doctrine2中访问php中的鉴别器字段吗?
EN

Stack Overflow用户
提问于 2010-12-15 21:28:43
回答 8查看 19.4K关注 0票数 31

我有一个如下定义继承的实体:

代码语言:javascript
复制
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"text" = "TextAttribute", "boolean" = "BooleanAttribute", "numeric" = "NumericAttribute", "date" = "DateAttribute"})

我想知道有没有可能为字段'type‘设置getter?我知道我可以使用instanceof (在大多数情况下,这就是我正在做的),但在一些场景中,$item->getType()会让我的工作变得如此轻松。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-12-27 16:23:33

扩展beberlei所说的,你可以在属性类中声明一些常量,以及一个抽象的getType()函数。然后,在每个派生属性类中重载它。

类似于:

代码语言:javascript
复制
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;
    }
}
票数 24
EN

Stack Overflow用户

发布于 2014-02-11 19:45:16

这就是我要做的。

首先,您创建了一个AttributeInterface,以确保将来所有的新属性类型都将实现need方法:

代码语言:javascript
复制
interface AttributeInterface
{
    /**
     * Return the attribute type
     */
    public function getType();
}

然后创建实现AttributeInterface接口的Attribute抽象类。

@DiscrimatorMap调用中使用常量以保持一定的一致性

代码语言:javascript
复制
/**
 * 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()方法

代码语言:javascript
复制
/**
 * 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...
票数 17
EN

Stack Overflow用户

发布于 2014-01-09 21:15:31

既可以使用EntityManager,也可以使用DocumentManager。

代码语言:javascript
复制
$documentManager->getClassMetadata(get_class($entity))->discriminatorValue;
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4450381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档