我想在我的存储库中设计一个查询,但是用这个queryBuilder
方法来做它有点复杂,所以我更喜欢一个完整的查询。
$queryBuilder = $this->_em->createQueryBuilder(
"SELECT need_id
FROM notification_need
WHERE user_id <> :user
AND check_date >=
(SELECT check_date
FROM notification_need
WHERE user_id = :user
ORDER BY check_date DESC
LIMIT 1)
AND need_id IN
(SELECT id
FROM option_need
WHERE commande_id IS NULL)
")
->setParameter('user', $userId);
return $queryBuilder->getQuery()->getResult();
但是在执行这个请求的时候会产生一个错误:
[语法错误] 第 0 行,第 -1 列:错误:预期的标识变量 | 标量表达式 | 聚合表达式 | 函数声明 | 部分对象表达式 | "("子选择")" | CaseExpression,得到字符串的结尾。
Doctrine 中的查询生成器旨在与 DQL 一起使用,而不是与普通 SQL 一起使用。如果要运行普通 SQL,则需要从实体管理器中获取 DB 连接对象,并调用executeQuery
它:
$conn = $this->_em->getConnection();
$result = $conn->executeQuery(/* your query goes here */);
如果要使用参数,可以利用准备好的语句。在这种情况下,您可以像使用常规 PDO 对象一样工作:
$stmt = $conn->prepare('SELECT * FROM some_table WHERE id = :id');
$stmt->bindValue(':id', $someId);
$result = $stmt->fetchAll();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句