所有存储库中所有实体的唯一ID

时间:2016-12-25 09:26:12

标签: php doctrine-orm symfony doctrine-odm

在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 common lib 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()方法。

1 个答案:

答案 0 :(得分:0)

等效$entityManager->find()方法不允许entity参数为null。所以不,使用ORM无法做同样的事情。

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

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