【问题标题】:TYPO3 9.5 Extbase Query for UidArrayUidArray 的 TYPO3 9.5 Extbase 查询
【发布时间】:2020-12-03 14:42:41
【问题描述】:

我有以下 SQL 查询

    $uidArray = explode(",", $uids);
        foreach ($uidArray as $uid) {
            $dynamicUid[] = '`uid` LIKE \''.$uid.'\'';
        }
        $query = $this->createQuery();
        $query->statement("SELECT * FROM `tx_myextension_domain_model_thi` WHERE ".implode($dynamicUid, " OR "));
        return $query->execute();

这很好,但我想要这样:

 $uidArray = explode(",", $uids);
        $query = $this->createQuery();
        foreach ($uidArray as $key => $value) {
            $constraints[] =  $query->equals('uid', $value);
        }
        return $query->matching(
            $query->logicalAnd($constraints)
        )->execute();

在这里,我使用查询解析器得到以下输出:

'SELECT `tx_myextension_domain_model_thi`.* FROM `tx_myextension_domain_model_thi` 
`tx_myextension_domain_model_thi` 
WHERE ((`tx_myextension_domain_model_thi`.`uid` = :dcValue1) AND 
(`tx_myextension_domain_model_thi`.`uid` = :dcValue2)) AND 
(`tx_myextension_domain_model_thi`.`sys_language_uid` IN (0, -1)) AND 
(`tx_myextension_domain_model_thi`.`pid` = 0) AND 
((`tx_myextension_domain_model_thi`.`deleted` = 0) AND (
`tx_myextension_domain_model_thi`.`t3ver_state` <= 0) AND 
(`tx_myextension_domain_model_thi`.`pid` <> -1) AND 
(`tx_myextension_domain_model_thi`.`hidden` = 0) AND 
(`tx_myextension_domain_model_thi`.`starttime` <= 1607084460) AND 
((`tx_myextension_domain_model_thi`.`endtime` = 0)
    OR (`tx_myextension_domain_model_thi`.`endtime` > 1607084460)))' 

而 Uid 为 dcValue-Array。

   dcValue1 => '1' (1 chars)
   dcValue2 => '2' (1 chars)

也许有人可以帮我重写这个,因为不幸的是我不能再进一步了!

谢谢:)

【问题讨论】:

  • 你执行的结果是什么?
  • @AristeidisKaravas 没有语句的结果是空的 -> 我使用查询解析器得到以下信息(请参阅已编辑的问题,因为它对于评论部分来说太多了!
  • 您的对象存储在哪个页面 ID 中?看起来查询搜索了 pid 0。您使用的是哪个 TYPO3 版本?

标签: sql repository extbase typo3-9.x


【解决方案1】:

你试过 in 运算符吗?

 public function yourFunctionName($uid) 
 {
    $query = $this->createQuery();
    $query->in('uid', $uidArray);
   return $query->execute();
 }

假设您的数组如下所示:

$uidArray = [
  0 = '34',
  1 = '15',
  3 = '88'
]

编辑

如果您不关心对象的存储位置,则可以执行以下操作。

public function yourFunctionName($uid) 
{
   $query = $this->createQuery();
   $query->getQuerySettings()->setRespectStoragePage(FALSE);
   $query->matching(
       $query->in('uid', $uidArray)
   );
  return $query->execute()];
 }

这将忽略查询中的pid

【讨论】:

  • 感谢您的回答,是的,我已经尝试过,但不幸的是没有成功。 ` 数组(2 项) 0 => '1'(1 个字符) 1 => '2'(1 个字符)`
  • 这适用于 return $query->execute();我使用 TYPO3 9.5.22 并且对象没有存储在 PID 0 中,不知道我也必须在存储库中设置它们。我只在 setup 和 constants.ts 中设置了但是非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多