Doctrine ORM - 如何保持静态属性

Posted

技术标签:

【中文标题】Doctrine ORM - 如何保持静态属性【英文标题】:Doctrine ORM - How to persist static properties 【发布时间】:2016-11-02 18:30:17 【问题描述】:

我已经使用 Doctrine ORM 有一段时间了,我有一个类级属性(static 属性),我需要将它保存在 mysql 数据库中,我想现在怎么办。

Class Student 

    private $name;
    public static $instances = array();

    public __construct($name) 

        $this->name = $name;
        self::$instances[] = $this->name;

    


根据Documentation(Basic Mapping>Property Mapping):

php 类标记为实体后的下一步是将其属性映射到表中的

要配置属性,请使用@Column docblock 注释。 type 属性指定要用于该字段的 Doctrine Mapping Type。如果未指定类型,则默认使用字符串。

听起来学说只支持对象级属性。但正如标题“Basic Mapping”一样​​,我认为应该有某种类型的“Advanced Mapping”可能涵盖静态属性。我搜索了没有成功。

它也没有在Limitations and Known Issues列出

问题

有人请告诉我这是否可以在 Doctrine 2 中保持静态属性,如果不能,我应该如何完成这项任务? 有什么变通方法之类的吗?

【问题讨论】:

【参考方案1】:

不幸的是,我的声誉不允许发表评论,所以我必须写下这个作为答案。对此感到抱歉。

我的第一个想法是您以错误的方式进行此操作。您能否提供更多信息,“实例”实际上是什么?好像是系统中所有学生姓名的列表?为什么需要将其作为静态类属性?

一些想法:

1)

听起来学说只支持对象级别的属性。

是的,我认为这是正确的,但我没有真正看到其他任何用例。对我来说,在数据库中拥有静态数据在直觉上是错误的,因为它并不意味着(非常)经常更改。你不能只在代码或配置文件中拥有你的值(如果有太多的话)。另一方面,如果您的数据经常变化,那么它就不是静态的( 没有变化)。

2)如果你真的想映射它并将它放在数据库中,我相信关联映射是要走的路(一对多或多对多)。即,您应该将其移动到与学生实体有关系的自己的实体中。在您的情况下,您似乎应该创建一个包含所有学生列表的大学实体。这样您就可以迭代以构建所有名称的列表。

【讨论】:

以上是关于Doctrine ORM - 如何保持静态属性的主要内容,如果未能解决你的问题,请参考以下文章

boost::python:如何覆盖静态属性?

Codeigniter Datamapper ORM php 7静态问题

1122 django属性操作orm字段数据操作

Doctrine异常 - [Doctrine ORM Mapping MappingException]

如何避免与 Doctrine2 和 Zend Framework 2 的多对多关系重复?

如何在 symfony 中更新新版本的 Doctrine2 和 ORM?