原则ORM -如何持久化静态属性


Doctrine ORM - How to persist static properties

我一直在使用Doctrine ORM一段时间了,现在,我有一个类级属性(static属性),我需要在MySQL数据库中坚持,我想现在如何。

Class Student {
    private $name;
    public static $instances = array();
    public __construct($name) {
        $this->name = $name;
        self::$instances[] = $this->name;
    }
}

根据文档(基本映射>属性映射):

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

配置属性使用@Column docblock注释。type属性指定要用于该字段的原则映射类型。如果未指定类型,则使用string作为默认类型。

似乎doctrine只支持对象级属性。但是正如标题所写的"基本映射",我认为应该有某种类型的"高级映射";这可能涵盖了静态属性。我搜索了一下,没有成功。

限制和已知问题

也没有列出

有人请让我知道如果这是可能的坚持静态属性在原则2,如果不是,我应该如何完成这项任务?有没有之类的?

不幸的是,我的名声不允许评论,所以我不得不写这个作为一个答案。很抱歉。

我的第一个想法是你处理这件事的方式是错误的。你能提供更多的信息,什么是"实例"吗?看起来像是系统里所有学生的名单?为什么需要将其作为静态类属性?

一些想法:

1)

听起来好像doctrine只支持对象级属性。

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

2)如果你真的想映射它并在数据库中拥有它,我相信关联映射是一种方式(一对多或多对多)。也就是说,您应该将其移动到与学生实体有关系的自己的实体中。在您的示例中,看起来应该创建一个包含所有学生列表的University实体。这样你就可以迭代构建一个包含所有名字的列表。