如何使用 Doctrine DBAL、TYPO3 和 TypoScript 进行随机排序

How to sort randomly with Doctrine DBAL, TYPO3 and TypoScript

在 TYPO3 v8 中通过 TypoScript 创建查询 Doctrine-Framework 已经用于创建 SQL-查询。以下代码会引发错误,但在以前的 TYPO3 版本中是可能的:

lib.myElement = CONTENT
lib.myElement {
  wrap =  <div class="inner-wrapper">|</div>
  required = 1

  table = tt_content
  select.languageField = sys_language_uid
  select.pidInList = {$pidConstant}
  select.max = 1
  select.where = colPos = 0
  select.orderBy = RAND()
  select.selectFields = bodytext,image,header,header_link
  renderObj=COA
  renderObj{
      ...
  }
}

在 TYPO3 版本 8 中,现在记录了一个错误:

{"exception":"Doctrine\DBAL\Driver\Mysqli\MysqliException: Unknown column 'rand()' in 'order clause'...}

那么是否仍然可以随机排序,如果可以,在上面的 TypoScript 的基础上得到它的技巧是什么 运行?

诀窍是将 RAND() 添加到字段列表并分配一个别名。别名可用于排序。

lib.myElement = CONTENT
lib.myElement {
  wrap =  <div class="inner-wrapper">|</div>
  required = 1

  table = tt_content
  select.languageField = sys_language_uid
  select.pidInList = {$pidConstant}
  select.max = 1
  select.where = colPos = 0
  select.orderBy = my_alias
  select.selectFields = bodytext,image,header,header_link,RAND() as my_alias
  renderObj=COA
  renderObj{
      ...
  }
}