Doctrine 使用带有条令和类型3的SQL函数
我正在将一个旧的TYPO3扩展迁移到当前版本,并试图将我的数据库访问权限更改为使用原则。在大多数情况下,这非常有效,但现在我遇到了一些选择查询,它们使用SQL函数,例如“Year(FROM_UNIXTIME())” 我尝试按如下形式使用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
$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)
)