【问题标题】:From TYPO3 DB wrapper to doctrine. Select Statement从 TYPO3 DB 包装器到学说。选择语句
【发布时间】:2019-07-15 06:16:35
【问题描述】:

我必须使用 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);

现在可以了

【问题讨论】:

    标签: php sql doctrine typo3


    【解决方案1】:

    您好,Querybuilder 考虑了常见的“限制”,例如开始/结束日期、语言、隐藏/删除。我猜你的记录被其他一些限制过滤掉了。

    有关限制的更多信息,请参见此处:https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Database/RestrictionBuilder/Index.html#database-restriction-builder

    【讨论】:

    • 要查看所有这些限制,您可以通过以下方式查看查询:$queryBuilder->getSQL()。这应该给你类似的东西: SELECT 'job_id,uid,pid,hash' FROM tx_test WHERE (tx_test.deleted = 0) AND (tx_test.hidden = 0) AND (tx_test. starttime` tx_test.endtime` = 0) OR (tx_test.endtime > 1563172920));
    【解决方案2】:

    我怎样才能在学说中设置“$uidIndexField=''”?

    Doctrine 本身并没有这样的功能,afaik。早些时候,在 exec_SELECTgetRows 方法中的旧 Typo3 中,只需遍历数组以在返回之前设置该索引。现在看来你必须自己做同样的事情。我搜索了很长时间才找到好的、快速且希望是本地的方法来实现这种效果,但没有运气,但最后我偶然发现了那个片段:

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

    最后看起来就成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-31
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多