【问题标题】:Unique Id for all the entities from all repositories所有存储库中所有实体的唯一 ID
【发布时间】:2016-12-25 09:26:12
【问题描述】:

在 PHPCR (NoSQL) 中有类似 Uuid 的东西(它与表中的 Id 不同,仅对单个表唯一) - 整个数据库中所有文档(实体)唯一的 Id。例如,这很有帮助。使用表单,因为我可以在不知道实体的确切类的情况下使用 Uuid,并且仍然能够通过以下方式直接访问相关记录:

$objectManager->find(null, $uuid);

我希望在 Doctrine ORM 中使用与 RDBMS 类似的解决方案,即在仅知道其唯一 ID (Uuid) 时查找记录。你们中有人知道这样的解决方案吗?

来自 PHPCR-ODM 文档:

http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/basic-mapping.html#doctrine-mapping-types

每个文档都可以有一个唯一的标识符来引用它。虽然 uuid 也作为只读字符串属性公开,但它的正确映射是将其映射为 UUID。

更新:

这里是教义的来源:

来自通用 Doctrine 公共库https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Persistence/ObjectManager.php#L42

public function find($className, $id);

来自 ORM https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/EntityManager.php#L380

public function find($entityName, $id, $lockMode = null, $lockVersion = null)

但我不坚持使用 find() 方法。

【问题讨论】:

    标签: php doctrine-orm symfony doctrine-odm


    【解决方案1】:

    等效的$entityManager->find() 方法不允许实体参数为空。所以不,没有办法使用 ORM 来做同样的事情。

    我推测这是因为文档数据库与关系数据库完全不同。在关系数据库中,您需要查询每个表。换句话说,使用 ORM 您需要查询每个实体。据我所知,对于文档数据库,每个文档都是一个集合,而在关系数据库中,集合是派生的。

    我希望这会有所帮助并且有意义。我没有使用文档数据库的经验。 ORM 中find() 的方法签名似乎可以解释它。

    【讨论】:

    • 不一定要查询每个表。事实上,我已经发明了一个解决方案,但我希望已经有人写过这样的包(例如,有增强 Doctrine 功能的包),否则我必须自己写。我的解决方案非常简单:ORM 的 Uuid 可能包含关于 Id 和类的信息,并且可以是单个字符串,例如散列。至于其他点,我更新了我原来的消息。
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 2019-05-10
    • 2018-04-22
    • 2014-03-13
    • 2013-06-25
    • 2011-06-26
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多