我正在使用Symfony(2.5.0-DEV版本)和mongodb原则食谱http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html.
我现在正试图将已定义参数的值传递到findOneByIndex中。
因此,如果我执行以下$script = $repository->findOneByIndex(1);
,它将完美工作。但如果我执行以下$script = $repository->findOneByIndex($user);
,它将无法使用user的值进行搜索。
在routing.yml中,我有这个pattern: platform/designing/users/{user}/showuser
,在控制器中,我只是在showuserAction:下执行此操作
$repository = $this->get('doctrine_mongodb')->getManager()->getRepository('MyMpBundle:Scripts');
$script = $repository->findOneByIndex($user);
如有任何帮助,我们将不胜感激:)。
在上一个代码示例中,$user
变量的类型是什么?如果它是路由参数并且来自URI,我假设它可能是一个字符串。您可以使用var_dump()
在一次拍摄中获得类型和值。
根据前面的评论,您说Scripts文档有以下字段:
- _id
- 名称(字符串)
- 描述(字符串)
- 索引(整数)
- user_id(整数)
如果MongoDB文档中的index
字段是整数,则需要在查询中使用整数。例如,findOneByIndex('1')
将不匹配字段中具有整数1
的文档。这里的最佳实践是在查询之前将值强制转换为适当的类型。最好停止依赖神奇的DocumentRepository方法,并明确定义自己的findBy
方法,这些方法在内部执行强制转换。然后,您的控制器可以直接从路由或请求参数传递数字字符串,而不必担心自己进行整数转换。
此外,要评论您的原始代码示例:
$script = $repository->findOneByIndex($user);
这是针对路由模式platform/designing/users/{user}/showuser
的。你说这没有找到结果。我假设控制器的$user
参数是用户ID。如果是这样的话,为什么查询index
字段而不是user_id
?
这个值应该是一个整数,而不是对象。请传递id或索引值——我不知道它是如何存储在mongodb中的。
$repository = $this->get('doctrine_mongodb')->getManager()->getRepository('MyMpBundle:Scripts');
$script = $repository->findOneByIndex($user->getId());
是否将$user
传递给showuser
操作?像这样(注意$user作为参数):
public function showuserAction($user)
{
$repository = $this->get('doctrine_mongodb')->getManager()->getRepository('MyMpBundle:Scripts');
$script = $repository->findOneByIndex($user);
}
PS。我建议您将var$user
更改为$userId
,以免将其误认为$user对象