extbase typo3中的聚合函数
我正在使用(如,in,contains)extbase typo3中的聚合函数,typo3,extbase,Typo3,Extbase,我正在使用(如,in,contains) 但是如何在extbase查询语句中使用。我认为extbase查询的唯一解决方案是 $query->statement('SELECT AVG(clicks) FROM tablename ...') 还是不支持?据我所知,Extbase不支持在ORM中使用聚合函数。请参阅此处的更多信息: 您必须自己构建SQL查询(在语句中),并告诉查询返回原始结果(存储在数组中),而不是返回基于对象的查询 例如: $query = $this->creat
但是如何在extbase查询语句中使用。我认为extbase查询的唯一解决方案是
$query->statement('SELECT AVG(clicks) FROM tablename ...')
还是不支持?据我所知,Extbase不支持在ORM中使用聚合函数。请参阅此处的更多信息: 您必须自己构建SQL查询(在语句中),并告诉查询返回原始结果(存储在数组中),而不是返回基于对象的查询 例如:
$query = $this->createQuery();
$query->statement("SELECT AVG(clicks) as 'avg' FROM tablename ...");
$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
$result = $query->execute()[0][avg];
干杯,
Olivier您唯一可以使用的函数是
COUNT()
with
return $query->execute()->count();
对于所有其他函数,您必须执行本机查询,如其他答案中所述。如果您使用纯SQL语句,则SQL注入可能会出现问题 更好的方法应该是使用新的doctrine querybuilder,它从8.7版开始提供:
// SELECT COUNT(`uid`) FROM `tt_content` WHERE (`bodytext` = 'klaus')
// AND ((`tt_content`.`deleted` = 0) AND (`tt_content`.`hidden` = 0)
// AND (`tt_content`.`starttime` <= 1475580240)
// AND ((`tt_content`.`endtime` = 0) OR (`tt_content`.`endtime` > 1475580240)))
$count = $queryBuilder
->count('uid')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus'))
)
->execute()
->fetchColumn(0);
//从'tt_content'中选择COUNT('uid'),其中('bodytext`='klaus'))
//和(`tt_content`.`deleted`=0)和(`tt_content`.`hidden`=0)
//和(`tt_content`.`starttime`1475580240)))
$count=$queryBuilder
->计数('uid')
->from('tt_content')
->在哪里(
$queryBuilder->expr()->eq('bodytext',$queryBuilder->createNamedParameter('klaus'))
)
->执行()
->获取列(0);
正如其他人所指出的,您不能在查询对象本身上使用这些函数。但是,您可以使用以下内容:
使用TYPO3\CMS\Core\Utility\general功能;
使用TYPO3\CMS\Core\Database\ConnectionPool;
$queryBuilder=GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable(“我的表格”);
$statement=$queryBuilder
->选择('uid')
->addSelectLiteral(
$queryBuilder->expr()->max('interest\u field'、'awesome\u alias')
)
->来自(‘我的桌子’)
->groupBy(“有趣的字段”)
->执行();
请注意,这将返回一个QueryResult对象。Nop,我正在寻找像AVG()、MAX()和其他聚合函数这样的方法,就像我们已经为like()、IN()等找到的那样。这些方法在Extbase中不存在:。
// SELECT COUNT(`uid`) FROM `tt_content` WHERE (`bodytext` = 'klaus')
// AND ((`tt_content`.`deleted` = 0) AND (`tt_content`.`hidden` = 0)
// AND (`tt_content`.`starttime` <= 1475580240)
// AND ((`tt_content`.`endtime` = 0) OR (`tt_content`.`endtime` > 1475580240)))
$count = $queryBuilder
->count('uid')
->from('tt_content')
->where(
$queryBuilder->expr()->eq('bodytext', $queryBuilder->createNamedParameter('klaus'))
)
->execute()
->fetchColumn(0);