Найти ссылку на доктрину-mongodb
У меня есть коллекции пользователей и сообщений.
Пользователь выглядит как
{ "_id" : ObjectId("5089cc4c7b03b9902b000000"), "facebook_id" : "522128874" }
Пост выглядит как
{ "_id" : ObjectId("508aa21b7b03b9780800000f"), "facebook_id" : "10150709375878875", "user" : DBRef("User", ObjectId("5089cc4c7b03b9902b000000")), "message" : " Julia dream, dreamboat queen, queen of all my dreams", "updated_time" : 1333502938 }
Я хочу найти все сообщения определенного пользователя.
$user = $userRepo->findOneByFacebookId('522128874');
$posts = $postRepo->findOneByUser($user)
Не работает Я также пытался
$posts = $postRepo->findOneBy(array('user' => $user))
а также
$posts = $postRepo->findOneBy(array('user' => $user->getId()))
3 ответа
Если вы правильно сопоставили отношения документа, все, что вам нужно сделать, это просто
$user = $userRepo->findOneByFacebookId($fbid);
$posts = $user->getPosts();
Возможно, вы захотите взглянуть на документацию доктрина двунаправленных ссылок
Если вы хотите найти сообщения пользователя вручную (более утомительный способ), вам нужно создать метод findOneByUser($user) в вашем репозитории Post. Затем вам нужно будет преобразовать идентификатор пользователя в MongoId, а затем использовать построитель запросов, чтобы сопоставить поле user.$ Id с MongoId, которое будет возвращать курсор (и).
Помните, что когда вы создаете документ (в данном случае публикацию), в котором есть ссылка на другой документ, он сохраняет ссылку через его MongoId, поэтому вы не можете просто выполнить findOneByUser($user), если вы не создали этот метод самостоятельно.
Бам!
$posts = $postRepo->findOneBy(array('user.id' => $user->getId()))
Попробуйте, сработало для меня. Может показаться глупым, что вам придется запрашивать все элементы.
Вы должны использовать метод reference () в Query Builder для @ReferenceOne, например https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html
$qb = $postRepo->createQueryBuilder('u')
->field('user')->references($user);
PS: используйте includeReferenceTo () @ReferenceMany