簡體   English   中英

從 TYPO3 DB 包裝器到學說。 選擇語句

[英]From TYPO3 DB wrapper to doctrine. Select Statement

我必須使用 QueryBuilder 將一些代碼從 TYPO3 DB 包裝器遷移到 Doctrine。 在我的數據庫中有四個條目。

原聲明:

        $statementToMigrate = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
            'job_id,uid,pid,hash',
            'tx_test',
            'deleted = 0',
            null,
            null,
            null,
            'job_id'
        );

我的 QueryBuilder 版本:

        $table = 'tx_test';
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
            ->getQueryBuilderForTable($table);

        $sql = $queryBuilder
            ->select(
                "job_id,uid,pid,hash"
            )
            ->from($table)
            ->where(
                $queryBuilder->expr()->eq('deleted', 0)
            )
            ->execute()
            ->fetchAll();

原始聲明為我提供了所有四個條目。 新版本只有兩個。 差異在哪里? 以及如何在學說中設置“ $uidIndexField=''”?

解決方案:我添加了

            $queryBuilder
            ->getRestrictions()
            ->removeByType(StartTimeRestriction::class)
            ->removeByType(EndTimeRestriction::class);

現在它起作用了

您好 Querybuilder 考慮了常見的“限制”,如開始/結束日期、語言、隱藏/刪除。 我猜你的記錄被其他一些限制過濾掉了。

有關限制的更多信息,請參見此處: https : //docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Database/RestrictionBuilder/Index.html#database-restriction-builder

以及如何在學說中設置“ $uidIndexField=''”?

Doctrine 本身沒有這樣的功能,afaik。 早先在 exec_SELECTgetRows 方法中的舊 Typo3 中,該數組只是簡單地遍歷以在返回之前設置該索引。 現在看來你必須自己做同樣的事情。 我搜索了很長時間才能找到好的,快速的,希望是原生的方式來實現這種效果,但最終我偶然發現了那個片段:

...
// return $preparedStatement->fetchAll(\PDO::FETCH_ASSOC);
$result = $preparedStatement->fetchAll(\PDO::FETCH_ASSOC);
return array_column($result, null, $uidIndexField);

最后它看起來像這樣。

暫無
暫無

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

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