簡體   English   中英

TYPO3 9.5 用於 UidArray 的 Extbase 查詢

[英]TYPO3 9.5 Extbase Query for UidArray

我有以下 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();

在這里,我使用查詢解析器得到以下 Output:

'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)))' 

並將 Uids 作為 dcValue-Array。

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

也許有人可以幫我重寫這個,因為不幸的是我不能再進一步了!

謝謝:)

您是否嘗試過 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM