TYPO3:repository-> findAll()不起作用

时间:2017-06-14 08:14:23

标签: typo3 typoscript fluid

我正在使用后端模块构建扩展。当我调用 findAll ()方法时,它返回一个" QueryResult"对象

我尝试使用 findByUid ()检索对象,但它确实有效。

我在typoscript中设置了存储pid:

plugin.tx_hwforms.persistence.storagePid = 112

我也可以在typoscript对象浏览器中看到它。

我还将此添加到我的存储库类:

public function initializeObject()
    {
        $defaultQuerySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings::class);
        $defaultQuerySettings->setRespectStoragePage(false);
        $this->setDefaultQuerySettings($defaultQuerySettings);
    }

以便忽略存储pid ... 它仍然无法正常工作,findAll不会返回一系列的entites,因为它应该

5 个答案:

答案 0 :(得分:3)

这应该可行。在FindAll()的存储页面中必须存在问题,检查存储空间,但在findByXXX()中它会忽略存储。

bool

答案 1 :(得分:3)

存储库必须findAll方法返回QueryResult。只有返回单个对象(findOneByXYZ)的方法才会返回其他任何内容。

以下所有操作都会导致QueryResult加载它包含的实际结果。在执行其中之一之前,不会加载任何结果,并且调试QueryResult将不会产生除原始查询之外的任何信息。

  • $queryResult->toArray();
  • $queryResult->offsetGet($offset);$queryResult[$offset];
  • $queryResult->offsetExists($offset);
  • $queryResult->offsetSet($offset, $value);$queryResult[$offset] = $value;(但请注意,使用QueryResult自行执行此操作是不合逻辑的。)
  • $queryResult->offsetUnset($offset);unset($queryResult[$offset]);(再次,自己使用它不合逻辑)
  • $queryResult->current()->key()->next()->prev()->rewind()->valid()这些都可以直接调用,也可以调用开始迭代QueryResult。

请注意,->getFirst()->count()不会导致原始查询触发,如果尚未填充,则不会填充结果。相反,他们将执行优化查询。

Summa summarum:当你得到一个QueryResult时,你必须以某种方式触发它,这通常发生在你开始渲染结果集时。它不是预先填充的阵列;它是一个动态填充的迭代器。

答案 2 :(得分:2)

另外使用typoscript模块配置,例如

EXT:hwforms/ext_typoscript_setup.txt

确保您的Typoscript以root身份加载。对于BE模块,我更喜欢使用

answer

您编写模块和extbase配置的地方。

答案 3 :(得分:1)

尝试如下所示进行debbug并检查此存储库中的findAll()方法。我认为这对你有用click here

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(get_class_methods($this->yourRepositryName)); exit();

Afetr在您需要uninsatll/install分机后添加了所有更改。

答案 4 :(得分:1)

我会检查生成的查询本身。在安装工具中配置以下选项:

$GLOBALS["TYPO3_CONF_VARS"]["sqlDebug"]

注意:请勿在生产环境中执行此操作!!

sqlDebug的解释:

将其设置为“0”将避免在屏幕上显示任何信息。

将其设置为“1”只会显示错误。

将其设置为“2”将在屏幕上打印所有查询。

因此,在生产中,您希望将其保持为“0”,在开发环境中,您应将其设置为“1”,如果您想知道为什么某些结果为空,请将其配置为“2”。

我猜想一些启用字段配置会导致您的问题。

如果通过findByUid检索对象,则会返回,因为会忽略enablefields。在其他所有情况下都会应用启用字段,这可能会导致空结果。