【发布时间】:2016-02-13 18:06:18
【问题描述】:
我正在使用 Symfony2 和 Doctrine ORM,并希望通过简洁的架构实现以下目标:
每次创建新实体时,我都想保存最终用户选择的“显示名称”,然后根据“显示名称”生成一个“唯一名称”。
如果我的最终用户想要创建 3 个名为“Drawings”的项目,
- 第一个将具有 display_name = "drawings"
- 第二个将具有 display_name = "drawings2"
- 第三个将具有 display_name = "drawings3"
(或类似的东西,不管是什么模式)
基本实体示例:
/**
* Project.
*
* @ORM\Entity
*/
class Project
{
//...
/**
* @ORM\Column(type="string", length=50, nullable=false)
*/
protected $name_display ;
/**
* @ORM\Column(type="string", length=50, nullable=false, unique=true)
*/
protected $name_unique ;
//...
基本用法示例:
$project = new Project();
$project->setDisplayName('Drawings');
//Around here I would like the Unique name to be generated
$this->getDoctrine()->getManager()->persist($project);
我想过各种解决方案:
- 在 Controller 中生成名称,但不可重用
- 在存储库中生成唯一名称。但这似乎是一种不好的做法(存储库应该是只读的)
- 使用来自学说的 PrePersist LifecycleCallbacks,但这不是一个好习惯,因为我需要实体管理器来创建数据库
- 在实体设置器中生成名称,注入实体管理器以发出请求并查找可用名称。这看起来很可怕
- 使用服务来持久化实体,如下所述:Are Doctrine2 repositories a good place to save my entities?(但如果我想让我的所有实体创建都与这种做法保持一致,它会非常复杂并且涉及到我的基础架构的巨大变化)
【问题讨论】:
标签: php entity-framework symfony orm doctrine