Doctrine 使用带有条令和类型3的SQL函数

Doctrine 使用带有条令和类型3的SQL函数,doctrine,typo3-9.x,typo3-extensions,doctrine-query,Doctrine,Typo3 9.x,Typo3 Extensions,Doctrine Query,我正在将一个旧的TYPO3扩展迁移到当前版本,并试图将我的数据库访问权限更改为使用原则。在大多数情况下,这非常有效,但现在我遇到了一些选择查询,它们使用SQL函数,例如“Year(FROM_UNIXTIME())” 我尝试按如下形式使用sql函数: $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('mytable'); $queryBuilder

我正在将一个旧的TYPO3扩展迁移到当前版本,并试图将我的数据库访问权限更改为使用原则。在大多数情况下,这非常有效,但现在我遇到了一些选择查询,它们使用SQL函数,例如“Year(FROM_UNIXTIME())”

我尝试按如下形式使用sql函数:

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('mytable');

$queryBuilder
     ->select('i.*','c.title AS cat_title','c.uid AS cat_uid')
     ->from('mytable','i')
    ->join('c'
        ...
    )
    ->join('d'
        ...
    )
    ->where(
         $queryBuilder->expr()->eq('Year(FROM_UNIXTIME(i.datetime))', $queryBuilder->createNamedParameter($year, \PDO::PARAM_STR))
    )       

问题只在于where部分,如果我在SQL语句中读取where子句,那么where子句就会被忽略,就好像代码行从未发生过一样

然后,我继续围绕where语句生成调试语句,并将其封装在一个带有日志的try-catch块中: 它执行得很好,没有错误,但什么也不做

在谷歌之后,我现在相信,我需要使用再次实现该功能,但typo3网站上的文档没有提到这一点,因此我有点不确定如何继续

有人能给我指出正确的方向吗

任何帮助都将不胜感激

问候
Theo

我默认使用php将年份解析为完整日期,并将其转换为unix时间戳。使用ORM的选项就在那里,但太多了,无法处理

我的实施如下:

// to convert towards db:
$queryBuilder->createNamedParameter(mktime(0,0,0,1,1, (int)$year), \PDO::PARAM_INT)
// and back:
$queryBuilder->select('i.datetime AS yearb')
// ... the rest of the query seems of litle interest
;
$current = date("Y",$queryBuilder->execute()->fetch()['yearb']);
您可以使用普通SQL:

$queryBuilder
    ->select('i.*','c.title AS cat_title','c.uid AS cat_uid')
    ->from('mytable','i')
    ->join('c'
        ...
    )
    ->join('d'
        ...
    )
    ->where(
        'Year(FROM_UNIXTIME(i.datetime)) = '.$queryBuilder->createNamedParameter($year, \PDO::PARAM_STR)
    )