我遇到了一个新的Symfony2项目以前从未见过的问题。 我已经使用普通表单登录为新应用程序设置了身份验证,并且工作正常。
问题是当我尝试在控制器的操作中使用原则 DQL 或原始 SQL 查询数据库时。 只是为了测试,我正在尝试查询身份验证使用的同一用户表。 我把它做了一个非常简单的查询,应该有结果,但是当查询被执行时,没有返回任何结果。
这就是我进行查询的方式:
$sql = "SELECT * FROM sys_user";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$user = $stmt->fetchAll();
$return = array("success"=>true,"data"=>$user);
$response = new JsonResponse($return );
return $response;
我直接在我的数据库上执行了此查询,它肯定有数据,所以我不知道为什么这不起作用。 在我看来,如果身份验证机制可以从数据库中提取数据,那么我无法从同一个表中获取数据是没有意义的。
没有错误,只是一个空的结果。
我不知道从我的配置文件发布是否有帮助,因为在我看来一切都设置正确,只是查询没有返回数据。
有人经历过吗?任何想法我能做什么?
我正在使用:Symfony 2.3.6,菲律宾比索 5.3.27,邮政 9.2,IIS 7.5
编辑:
这是我使用 DQL 的查询。 我更喜欢使用 DQL 来实现可维护性。
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT u
FROM MyCoreBundle:SysUser u'
);
$user = $query->getResult();
这将为表中的每一行返回一个空结果。 所以 doctrine 知道有多少行,但不会返回对象。 我在这里缺少什么吗?这是一个直接来自symfony文档的修改片段,所以我不知道可能出了什么问题。
这也做了同样的事情:
$user = $this->getDoctrine()
->getRepository('MyCoreBundle:SysUser')
->findAll();
问题出在响应上。 以下是返回响应的方式:
$response = new JsonResponse($user);
这使用期望和关联数组json_encode作为参数。 需要做的是:
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT u
FROM MyCoreBundle:SysUser u'
);
$user = $query->getArrayResult();
这就解决了问题。
在 $stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
我认为这可能是问题所在。