【问题标题】:doctrine odm query reference many field学说 odm 查询引用多字段
【发布时间】:2016-12-21 04:00:58
【问题描述】:

以文档为例:

/** @Document */
class BlogPost
{
    // ...

    /** @ReferenceOne(targetDocument="User", inversedBy="posts") */
    private $user;
}

/** @Document */
class User
{
    // ...

    /** @ReferenceMany(targetDocument="BlogPost", mappedBy="user") */
    private $posts;
}

有什么方法可以查询用户实体并检索他的所有帖子?

我的意思是我可以使用示例查询:

db.BlogPost.find({ 'user.$id' : user.id })

但是如果我想做什么:

db.User.find({ 'id' : id })

并通过用户属性 $posts 访问用户帖子

可以存档吗?

编辑

当我执行查询时,我们可以找到日志:

[2016-08-15 17:13:45] doctrine.DEBUG: MongoDB query: {"find":true,"query":{"_id":{}},"fields":[],"db":"base","collection":"User"} [] []
[2016-08-15 17:13:45] doctrine.DEBUG: MongoDB query: {"limit":true,"limitNum":1,"query":{"_id":{}},"fields":[]} [] []
[2016-08-15 17:13:45] doctrine.DEBUG: MongoDB query: {"limit":true,"limitNum":null,"query":{"_id":{}},"fields":[]} [] []

【问题讨论】:

    标签: php mongodb symfony doctrine-orm odm


    【解决方案1】:

    使用 Doctrine ODM:

    $dm = $this->get('doctrine_mongodb')->getManager();
    
    $user = $dm->getRepository('AppBundle:User')->findOneById($id);
    $posts = $user->getPosts();
    

    【讨论】:

    • 我已经尝试过了,getPosts 返回一个空集合,还有什么我需要检查或检查可能导致这种情况发生的吗?
    • 你有没有用教义填满你的数据库?
    • 是的,我正在处理的工作流,特别是一个测试场景;涉及首先为用户创建一些帖子,然后尝试从中检索这些帖子,但它返回的是空的。
    • 在 Symfony Profiler 中检查 Doctrine 的 MongoDB 查询。并尝试直接在 MongoDB shell 中使用它们。如果它不起作用,则您的映射不好。 (您可以将这些结果查询添加到您的问题中)
    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多