- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我遇到了许多 TYPO3 扩展的问题,这些扩展通过 Uid 排序查询结果,这些 Uid 来自后端的 flexform 插件设置。我尝试创建一个查询,它以与来自插件设置的 flexform 相同的顺序给我结果 uid。就像我选择 data.uid 5 7 和 3,我的查询结果按这个顺序给我。
例如:
站点信息:
此函数从 Controller 调用。
$partners = $this->partnerRepository->findByUids($this->settings['showMainSponsor']);
在 $this->settings['showMainSponsor'] 中的值为 ="3, 4 ,1"。
这些是 TYPO3 插件设置中所选区域的 Uid。
存储库函数“findByUids”如下所示。
public function findByUids($uids){
if(!isset($uids) || empty($uids)){
return NULL;
}
$uidListString = $uids;
if(!is_array($uids)){
$uidListString = explode(',', $uids);
}
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
//here i set the orderings
$orderings = $this->orderByField('uid', $uidListString);
$query->setOrderings($orderings);
$query->matching(
$query->logicalAnd(
$query->in('uid', $uidListString)
)
);
return $query->execute();
}
此处调用名为“orderByField”的函数来设置所有排序。
/**
* @param string $field
* @param array $values
*
* @return array
*/
protected function orderByField($field, $values) {
$orderings = array();
foreach ($values as $value) {
$orderings["$field={$value}"] = \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING;
}
return $orderings;
}
这些通过来自 Flexform 的给定 uid 列表对查询结果进行排序的方法适用于 TYPO3 6.2 和 7.6。现在我尝试将此扩展附加到 TYPO3 8.6 项目,但此方法不再有效。我试图调试它并在查询中查找。在那里我发现是什么打破了这个查询。不起作用的查询如下所示:
SELECT `tx_partner_domain_model_partner`.* FROM `tx_partner_domain_model_partner` `tx_partner_domain_model_partner` WHERE (`tx_partner_domain_model_partner`.`uid` IN (3, 4, 1)) AND (`tx_partner_domain_model_partner`.`sys_language_uid` IN (0, -1)) AND ((`tx_partner_domain_model_partner`.`deleted` = 0) AND (`tx_partner_domain_model_partner`.`t3ver_state` <= 0) AND (`tx_partner_domain_model_partner`.`pid` <> -1) AND (`tx_partner_domain_model_partner`.`hidden` = 0) AND (`tx_partner_domain_model_partner`.`starttime` <= 1506603780) AND ((`tx_partner_domain_model_partner`.`endtime` = 0) OR (`tx_partner_domain_model_partner`.`endtime` > 1506603780))) ORDER BY `tx_partner_domain_model_partner`.`uid=3` DESC, `tx_partner_domain_model_partner`.`uid=4` DESC, `tx_partner_domain_model_partner`.`uid=1` DESC
我在我的 DBMS 上试过了,但失败了。原因是最后 3 个陈述。
`tx_partner_domain_model_partner`.`uid=3` DESC, `tx_partner_domain_model_partner`.`uid=4` DESC, `tx_partner_domain_model_partner`.`uid=1` DESC
TYPO3 使用 `` like 转义了 uid
`tx_partner_domain_model_partner`.`uid=4` DESC
如果我们在没有这些 `` around the uid=3 的情况下像这样调用 ..
`tx_partner_domain_model_partner`.uid=3 DESC, `tx_partner_domain_model_partner`.uid=4 DESC, `tx_brapartner_domain_model_partner`.uid=1 DESC
它工作正常。也许 TYPO3 在他的最新版本上这样做是出于安全原因,但我没有为这个基本案例找到任何其他好的解决方案。目前我有一个 foreach,我通过 findByUid 查询每个 uid,但这在我看来不像是“最佳实践”方式。对于这种从数据库获取数据的情况,有人有更简洁的方法吗?或者这可能是一个错误?
我希望有人能帮助我。
最好的问候
法诺
最佳答案
没有覆盖:
清除默认排序:
$query->setOrderings(array());
将您的 QueryBuilder 转换为新的 Doctrine QB:
/** @var Typo3DbQueryParser $queryParser */
$queryParser = $this->objectManager->get(Typo3DbQueryParser::class);
/** @var QueryBuilder $doctrineQueryBuilder */
$doctrineQueryBuilder = $queryParser->convertQueryToDoctrineQueryBuilder($query);
通过 concreteQb 添加 UID
$concreteQb = $doctrineQueryBuilder->getConcreteQueryBuilder();
foreach ($uidList as $uid) {
$concreteQb->addOrderBy("$key={$uid}", QueryInterface::ORDER_DESCENDING);
}
获取映射结果:
/** @var DataMapper $dataMapper */
$dataMapper = $this->objectManager->get(DataMapper::class);
return $dataMapper->map(YourDataClass::class, $$doctrineQueryBuilder->execute()->fetchAll());
关于php - TYPO3 8.7 使用 Flexform uid 的查询排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46471525/
考虑这两个程序及其尝试编译。 #include int main() { std::vector a; // Errors centered around `Typo` being an i
如何才能检测到拼写错误,但仅限于特定短语。另一种思考方式是如何检测某个正则表达式的拼写错误。 例如,我不想要一个通用的拼写错误查找器,我在上面找到了多个资源。我不想要一个通用的拼写检查器,我又在上面找
我现在正在研究算法,我遇到过一个例子,我的回答是 Infinite loop但在正确答案中,它说它是 O(log2n) . function someFunc(n) { for(var i =
IntelliJ IDEA 具有检查拼写的功能。在分析概述中,我可以看到发现了多少拼写错误,例如发现 12 个拼写错误。在代码中,它们使用绿色波浪线突出显示。 但是,我发现手动查找那些波浪线非常困难。
我是 still通过“七周内的七种语言”,我发现了一个错字或我不明白的东西。 挑战之一是: Write a function that takes an argument x and returns
我正在从 Jquery 调用 WCF Rest 服务,如下所示。在我的 WCF Rest 服务中,安全模式是传输。下面的代码返回“访问被拒绝”错误。 function GetRest
引用自 Resources Documentation 的 smallestWidth 部分安卓: Thus, the value you use should be the actual small
IntelliJ IDEA 具有检查拼写的检查功能。在分析概览中,我可以看到发现了多少拼写错误,例如发现 12 个拼写错误。在代码中,它们使用绿色波浪线突出显示。 但是,我发现手动查找那些波浪线非常困
当命名变量或提供字符串参数时,Android Studio 似乎对我如何标记事物有问题。 有没有办法关闭它? 最佳答案 是的,打开 Preferences -> Editor -> Inspectio
我已将数据添加到 solr。 名称字段值为:“batman”、“bat man”、“bat-man” 因此,如果用户搜索“btman”,结果应显示搜索中的所有上述值。 我发现这样的查询:localho
use YAML::XS; local $YAML::XS::DumpCode=1; ... 我收到警告: Name "YAML::XS::DumpCode" used only once: poss
我在 react native 应用程序中遇到了 eslint 的问题。我正在为我的组件声明样式属性。它看起来像: Component.propTypes = { styles: ViewPro
我的一个函数加密一个字符串,我的一个测试验证它发生了。自然,像 sldjf982389 这样的字符串不被识别为有效的英语单词,所以 IntelliJ提示。 如果有办法在不向字典中添加垃圾的情况下抑制这
我在云托管中托管了一个 wordpress 网站。我注意到 apache error_log 文件大小增长得非常快,我发现了这个错误(Kirki: Typo found in field post_t
我经常被指向错误博客引擎的来源,即 http://typosphere.org/stable.tar.gz但是,如果我下载并执行以下操作:捆绑安装等。它会作为单独的引擎运行。 我尝试将拼写错误安装为
我正在使用 cakePHP 创建待办事项应用程序。 CakePHP 会为您创建查询等。这就是为什么不能出现拼写错误的原因。 错误: Error: SQLSTATE[42S22]: Column not
我有一个脚本,它列出了特定目录中可能的文件。该代码工作正常,但如何避免此警告? #!/usr/bin/perl use strict; use warnings; use autodie; my $l
在Lua网站上https://www.lua.org/pil/16.1.html ,有这段代码 function Account:new (o) o = o or {} -- create o
在我的 Gruntfile.js 中,我将咖啡任务配置为如此,并且 src/ 目录中存在一个文件 script.coffee: coffee: { dist: { files:
我的问题是关于行(编辑:19),其中新的 PrintWriter 是使用将 FileWriter fw 作为参数的构造函数创建的。如果稍后在实际写作中不使用,我不明白将 BufferedWriter
我是一名优秀的程序员,十分优秀!