【问题标题】:Doctrine ORM - How to persist static propertiesDoctrine ORM - 如何保持静态属性
【发布时间】:2025-12-08 10:55:01
【问题描述】:

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

Class Student {

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

    public __construct($name) {

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

    }

}

根据DocumentationBasic Mapping>Property Mapping):

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

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

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

它也没有在Limitations and Known Issues列出

问题

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

【问题讨论】:

    标签: php symfony orm doctrine-orm doctrine


    【解决方案1】:

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

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

    一些想法:

    1)

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

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

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

    【讨论】: