2016-12-25 9 views
0

В PHPCR (NoSQL) есть что-то вроде Uuid (это нечто иное, чем Id в таблице, уникальное только для отдельной таблицы) - идентификатор, который уникален для всех документов (объектов) во всей базе данных. Это очень помогает, когда, например, с использованием форм, потому что я могу использовать UUID, не зная точный класс сущности, и все еще быть в состоянии получить доступ непосредственно связанную запись просто:Уникальный идентификатор для всех сущностей из всех репозиториев

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

Я хотел бы иметь подобное решение с РСУБД в Doctrine ORM, т. е. найти запись, зная только ее уникальный идентификатор (Uuid). Кто-нибудь из вас знает о таком решении?

Из документации PHPCR-ODM:

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

Каждый документ может иметь уникальный идентификатор для нее ссылаться. Хотя uuid также отображается как свойство строки только для чтения, соответствующее сопоставление для него отображает его как UUID.

UPDATE:

Вот источники Доктрина в:

Из общей доктрины общего Lib https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Persistence/ObjectManager.php#L42

public function find($className, $id); 

От ОРМ https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/EntityManager.php#L380

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

Но я не придерживаюсь метода find().

ответ

0

Этот эквивалент $entityManager->find() не позволяет параметру сущности быть нулевым. Нет, нет способа сделать то же самое с помощью ORM.

Я бы предположил, что причиной этого является то, что документ db сильно отличается от реляционных баз данных. В реляционной базе данных вам нужно будет запросить каждую таблицу. Другими словами, используя ORM, вам нужно запросить каждую сущность. С помощью базы данных документов, насколько я могу судить, каждый документ является множеством, тогда как в реляционных наборах баз данных.

Я надеюсь, что это поможет и имеет смысл. У меня нет опыта работы с базами данных документов. По-видимому, объяснение метода для find() в ORM объясняет это.

+0

Невозможно запросить каждую таблицу. На самом деле, я уже придумал решение, но я надеялся, что есть такой комплект (например, такие, как пучки, улучшающие способности Doctrine), которые уже кто-то написал, иначе мне пришлось бы написать его самостоятельно. Мое решение довольно просто: Uuid для ORM может содержать информацию обо всех, Id и класса, и может быть одной строкой, например. хэшируются. Что касается других моментов, я обновил свое оригинальное сообщение. – forsberg