关于在Doctrine2查询构建器中链接orX和查询构建器sql语句错误的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于asp.net–基于Web的可视化查询构建器、Doctrine2查询
关于在Doctrine2查询构建器中链接orX和查询构建器sql语句错误的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于asp.net – 基于Web的可视化查询构建器、Doctrine 2查询生成器ABS函数、Doctrine ORM 查询构建器获取键值对、doctrine-orm – doctrine2 DQL子查询1行限制等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 在Doctrine2查询构建器中链接orX(查询构建器sql语句错误)
- asp.net – 基于Web的可视化查询构建器
- Doctrine 2查询生成器ABS函数
- Doctrine ORM 查询构建器获取键值对
- doctrine-orm – doctrine2 DQL子查询1行限制
在Doctrine2查询构建器中链接orX(查询构建器sql语句错误)
我必须在添加子句之后立即将OR
表达式动态地添加到所返回的查询构建器中。我找不到任何合适的方式来做到这一点,我才刚刚开始学习Doctrine。getListQueryBuilder``where
我如何“链接”给定数量的orX
并将其添加到我的构建器中?
public function getListQueryBuilder($ownerId){ $qb = $this->createQueryBuilder(''t''); return $qb ->where($qb->expr()->eq(''t.user'', '':user'')) ->setParameter(''user'', $ownerId);}$builder = getListQueryBuilder(4);// $ORs is a dynamically builded array, here is just an example$ORs = array();$ORs[] = $builder->expr()->like("t.name", ''my name'');$ORs[] = $builder->expr()->like("t.description", ''desc'');// Adding ORs to the builder$builder->andWhere($builder->expr()->orX(/* here */));
答案1
小编典典您可以检查此解决方案:
$orX = $builder->expr()->orX();foreach($ORs as $or) { $orX->add($or);}$builder->andWhere($orX);
asp.net – 基于Web的可视化查询构建器
解决方法
Doctrine 2查询生成器ABS函数
这项工作:
$qb = $this->em->createQueryBuilder(); $qb->select("abs(u.code) as code") ->from("User", "u") ->orderBy("code","ASC") ->getQuery() ->getArrayResult();
这不起作用:
$qb = $this->em->createQueryBuilder(); $qb->select("u.code") ->from("User", "u") ->orderBy("abs(u.code)","ASC") ->getQuery() ->getArrayResult();
错误:
语法错误]行0,列118:错误:预期的字符串结尾,得到了’(’
本地学说功能abs仅对语句的选定部分起作用,而对部分命令不起作用。
Obs:
1-)我避免使用NativeQuery。
2-)u.code是mysql上的varchar fild,需要是varchar(有时是数字,有时是字符串),我需要在数字情况下像数字一样排序。
有帮助吗?
答案1
小编典典解决的atma Thank’s abs()
realy不能直接在orderBy中使用,而只能作为别名使用。
溶解度
SELECT field1,field2,abs(field3) AS abs_field3 FROM table ORDER BY abs_field3 ASC
Obs:这是一个理论上的限制,而不是mysql的限制,mysql会部分按顺序直接支持abs。
Doctrine ORM 查询构建器获取键值对
如何解决Doctrine ORM 查询构建器获取键值对?
我在实体存储库中有以下代码:
$rows = $this->createqueryBuilder(''t'')
->select([''t.idColumn'',''t.valueColumn''])
->where(''t.foo = :foo'')
->orderBy(''t.idColumn'',''ASC'')
->setParameter(''foo'',$foo)
->getQuery()
->getArrayResult(); // This returns [[idColumn => ...,valueColumn => ...],...]
$data = [];
foreach ($rows as $row) {
$data[$row[''idColumn'']] = abs($row[''valueColumn'']); // Remapping to [id => value]
}
return $data;
有什么办法可以在本地摆脱自定义重映射?我知道你可以使用 indexBy 参数,但这只能让我得到正确的键而不是值。
附言我知道 array_column(),但这是我每次都必须执行的额外步骤,更不用说它不适用于实体具有的方法。
P.P.S.这不是在使用 Symfony。
解决方法
这似乎不是 QueryBuilder 中实现的功能,但是 fetchAllKeyValue 已在 DBAL 2.11 中添加到 Connection
对象中。
Commit、usage
doctrine-orm – doctrine2 DQL子查询1行限制
$dql = "select p from AcmeDemoBundle:UserTypeA p where p.UserTypeB = :id and ( select top 1 r.boolean from AcmeDemoBundle:Registry r ) = true";
但似乎TOP 1它不是doctrine2中的有效函数.
我无法弄清楚如何将子查询的结果限制为一行.
解决方法
见http://www.doctrine-project.org/jira/browse/DDC-885
今天关于在Doctrine2查询构建器中链接orX和查询构建器sql语句错误的介绍到此结束,谢谢您的阅读,有关asp.net – 基于Web的可视化查询构建器、Doctrine 2查询生成器ABS函数、Doctrine ORM 查询构建器获取键值对、doctrine-orm – doctrine2 DQL子查询1行限制等更多相关知识的信息可以在本站进行查询。
本文标签: