在PHPCR(NoSQL)中有类似Uuid的东西(它与表中的Id不同,仅对单个表唯一) - 整个数据库中所有文档(实体)所独有的Id。这对我们来说很有帮助。使用表单,因为我可以在不知道实体的确切类别的情况下使用Uuid,并且仍然能够直接访问相关记录:
$objectManager->find(null, $uuid);
我想在Doctrine ORM中使用RDBMS的类似解决方案,即在仅知道其唯一ID(Uuid)时查找记录。你们中的任何人都知道这样的解决方案吗?
来自PHPCR-ODM文档:
每个文档都可以有唯一的标识符来引用它。虽然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()方法。
答案 0 :(得分:0)
等效$entityManager->find()
方法不允许entity参数为null。所以不,使用ORM无法做同样的事情。
我猜想这就是文档db与关系数据库完全不同的原因。在关系数据库中,您需要查询每个表。换句话说,使用ORM,您需要查询每个实体。对于文档数据库,据我所知,每个文档都是一个集合,而在关系数据库集合中则是派生的。
我希望这有帮助并且有意义。我没有文档数据库的经验。 ORM中find()
的方法签名似乎可以解释它。