use*_*816 5 typo3 fluid typoscript
我正在构建带有后端模块的扩展。当我调用findAll () 方法时,它返回一个“QueryResult”对象。
我尝试使用findByUid () 检索对象,它确实有效。
我在打字稿中设置了存储pid:
plugin.tx_hwforms.persistence.storagePid = 112
Run Code Online (Sandbox Code Playgroud)
我还可以在打字稿对象浏览器中看到它。
我还将其添加到我的存储库类中:
public function initializeObject()
{
$defaultQuerySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings::class);
$defaultQuerySettings->setRespectStoragePage(false);
$this->setDefaultQuerySettings($defaultQuerySettings);
}
Run Code Online (Sandbox Code Playgroud)
这样存储 pid 就被忽略了...它仍然不起作用,findAll 没有返回应有的实体数组
存储库必须从方法返回 QueryResult findAll。只有返回单个对象 ( 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 时,您必须以某种方式触发它,这通常在您开始呈现结果集时发生。它不是一个预填充数组;它是一个动态填充的迭代器。
这应该可以工作。FindAll() extbase 检查存储中的存储页面一定有问题,但在 findByXXX() 中它忽略存储。
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\Extbase\\Object\\ObjectManager');
$querySettings = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$this->cityRepository->setDefaultQuerySettings($querySettings);
$cities = $this->cityRepository->findAll();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6495 次 |
| 最近记录: |