繁体   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