Документ построителя запросов Doctrine ODM PHPCR присоединяется к реляционной базе данных

У меня есть 2 разных хранилища для CMS, которые я создаю. Реляционная база данных и репозиторий контента (PHPCR + Doctrine ODM). У меня есть User, который хранится в реляционной базе данных, и у меня есть документ Post, который хранится в PHPCR. Как бы я получил все сообщения для всех активных пользователей.

Псевдокод (для демонстрации):

$qb = $this->createQueryBuilder('Document\Post', 'post');
$qb->join('post.user', 'user'); // We join on the table inside a relation database
$qb->where('user.active = 1');

$posts = $qb->getQuery()->execute(); // All posts objects of active users

Это вообще возможно? Или мне нужно использовать 1 тип хранилища (реляционное или PHPCR) для всех моих данных?

Надеюсь, кто-нибудь может мне помочь!


person Steffen Brem    schedule 08.05.2014    source источник


Ответы (1)


Вы не можете присоединиться к разным базам данных. Если у вас нет тысяч и тысяч пользователей, вы можете просто отобразить их в PHPCR. В противном случае вы могли бы сделать два запроса. Один в ORM для получения ваших пользователей, а затем один в PHPCR-ODM для получения всех сообщений, которые имеют имя пользователя, которое является одним из пользователей, которых вы ищете.

Для ссылок из ORM в PHPCR вы можете использовать функцию «ссылки» документов и хранить UUID в реляционной базе данных. Вы можете find документ по UUID:

$dm->find(null, $uuid)
person dbu    schedule 09.05.2014
comment
Медленен ли PHPCR с Doctrine ODM? Я надеюсь, что нет, я создаю крупномасштабную систему CMS. Который, вероятно, будет иметь более 100 000 документов. Я буду использовать эластичный поиск, чтобы проиндексировать больше всего. Как бы PHPCR сделал это со 100 000 документов? - person Steffen Brem; 09.05.2014
comment
Тогда вам точно захочется заглянуть в jackalope-jackrabbit. Jackrabbit — это механизм хранения для Adobe Experience Manager (бывший Adobe CQ, бывший Day Communique). Он может обрабатывать большие объемы данных. Он использует lucene внутри, но вы не можете напрямую получить к нему доступ, поэтому использование отдельного ElasticSearch кажется разумным. Единственный общий совет, который у меня есть, - избегать более 10 000 прямых дочерних узлов под одним родителем. Но лучше всего продолжить обсуждение на [email protected], чтобы связаться с другими пользователями, которые создают проекты с помощью PHPCR-ODM. - person dbu; 10.05.2014
comment
(Если вы используете доктрину вне Symfony, вы все равно можете задать вопрос там, на данный момент это самое большое сообщество пользователей PHPCR-ODM ;-) - person dbu; 10.05.2014