TYPO3 v12 存储库,带约束的查询

Car*_*edo 2 typo3 typo3-extensions typo3-12.x

自 TYPO3 v12 以来,在存储库查询中使用约束不再像以前那样工作。

public function findByDate(
   $dateFrom = null, 
   $dateTill = null, 
   $isAdmin = false, 
   $tags = [], 
   $keyword = ''
): QueryResultInterface
{
   $query = $this->createQuery();
   $query->getQuerySettings()->setIgnoreEnableFields(TRUE);
   $query->getQuerySettings()->setEnableFieldsToBeIgnored(['starttime','endtime']);

   $constraints = [];
   if ($keyword != '') {
      $constraints[] = $query->like('titel', '%'.$keyword.'%' );
   }else{
      if (isset($dateFrom) && isset($dateTill)) {
         $constraints[] = $query->logicalAnd(
            $query->lessThan('startdate', $dateTill->getTimestamp()),
            $query->greaterThan('startdate', $dateFrom->getTimestamp()),
         );
      }
   }

   if (count($tags) > 0) {
      $constraints[] = $query->logicalOr(
         $query->in('tags.uid', $tags)
      );
   }

   if ($isAdmin == false) {
      $constraints[] = $query->equals('share', true);
   }

   $query->matching($query->logicalAnd($constraints));
   return $query->execute();
}
Run Code Online (Sandbox Code Playgroud)

错误

TYPO3\CMS\Extbase\Persistence\Generic\Query::logicalAnd(): Argument #1 must be of type TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface, array given
Run Code Online (Sandbox Code Playgroud)

约束的输出:

还有办法使用约束吗?

  • 具有一个条件的查询有效
  • 直接带有 2 个约束的 LogicalAnd 也可以

Ste*_*ürk 6

签名已更改。不要将约束数组放入逻辑And(),而是使用扩展运算符...

代替

$query->matching($query->logicalAnd($constraints));
Run Code Online (Sandbox Code Playgroud)

$query->matching($query->logicalAnd(...array_values($constraints)));
Run Code Online (Sandbox Code Playgroud)

编辑1

添加了array_values()防护以避免使用较新的 PHP 版本进行关联密钥解包。