无法将参数值传递到 findOneBy Symfony 存储库



我正在使用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对象

相关内容

  • 没有找到相关文章

最新更新