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 - 如何保持静态属性的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter Datamapper ORM php 7静态问题
Doctrine异常 - [Doctrine ORM Mapping MappingException]