2012-02-28 1 views
1

Так что я не знаю тип документа, который хочу получить, и поэтому не знаю, как получить этот документ в доктрине. Обычно я бы somethink так:Doctrine CouchDB ODM: Как получить документ, когда вы не знаете его тип

$dm->find('User', 12345); 

И я должен получить класс пользователя. Но что, если я не знаю тип документа? Он хранится в документе, поэтому доктрина должна понять это. Я должен простой вызов

$dm->find(12345); //of course this doesn't work 

и Учение должны посмотреть в поле «тип» в документе и возвращает класс пользователя.

Конечно, я могу сделать это вручную, но, возможно, есть метод Doctrine для этой проблемы?

Так что мой вопрос: как получить (используя доктрину) документ и создать экземпляр правильного класса (в зависимости от поля типа, найденного в документе)?

ответ

1

Я думаю, что обычно вы хотели бы разработать view для каждого логического типа данных, который вы хотите посмотреть, где бы он ни находился на графике документа.

В противном случае вы могли бы написать представление, которое просматривает каждый документ, перебирая каждое свойство рекурсивно и находим значение 12345, но это, конечно, было бы, вероятно, очень медленным.

Взгляд может посмотреть ваш type объект (это duck typing) и emit() правильный объект.

+0

исправьте меня, если я ошибаюсь, но я думаю, что получение документов по _id не связано с прохождением через все документы? Я думаю, что вид «по id» уже находится в памяти, и вызов http: //couch.../db_name/12345 будет очень быстро доставать мне документ с идентификатором: 12345, потому что он hashed. –

+0

Они не должны повторяться каждый раз. Результаты просмотра инкрементно сохраняются в структуре B-дерева для более быстрого извлечения, но в первый раз они должны быть повторены. Обратите внимание, что в моем ответе я сказал «перебирать каждое свойство», под которым я подразумеваю свойства каждого из документов, оперированных в представлении, потому что вы искали определенное значение в дочернем свойстве. – dwerner

Смежные вопросы