首页 文章

TYPO3 Extbase - 通过大 table 分页(100000条记录)

提问于
浏览
1

我有一个相当大的表,大约有100000条记录 . 如果我没有在存储库中设置限制

库:

public function paginateRequest() {

$query = $this->createQuery();
$result = $query->setLimit(1000)->execute();
//$result = $query->execute();
return $result;

}

/**
 * action list
 *
 * @return void
 */
public function listAction() {

$this->view->assign('records', $this->leiRepository->paginateRequest());

//$this->view->assign('records', $this->leiRepository->findAll());

}

...查询和分页符虽然我正在使用f:widget.paginate . 根据文档https://fluidtypo3.org/viewhelpers/fluid/master/Widget/PaginateViewHelper.html我希望我只能通过记录渲染itemsPerPage和'parginate' ...

List.hmtl

<f:if condition="{records}">
<f:widget.paginate objects="{records}" as="paginatedRecords" configuration="{itemsPerPage: 100, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 10}">                     
    <f:for each="{paginatedRecords}" as="record">
        <tr>
            <td><f:link.action action="show" pageUid="43" arguments="{record:record}"> {record.name}</f:link.action></td>
            <td><f:link.action action="show" pageUid="43" arguments="{record:record}"> {record.lei}</f:link.action></td>
        </tr>
    </f:for>
</f:widget.paginate>

模型:

class Lei扩展\ TYPO3 \ CMS \ Extbase \ DomainObject \ AbstractEntity {

...
/**
 * lei
 *
 * @lazy
 * @var string
 */
protected $lei = '';
...

2 回答

  • 1

    您要分页的对象有多大/多复杂?如果它们在列表视图中有您不需要的子对象,请将@lazy注释添加到模型内的那些关系中 .

    由于记录量很大,您应该在列表视图中尽可能简单 . 您可以尝试仅使用 $this->leiRepository->findAll()->toArray() 将结果作为数组提供给列表视图,或者通过向execute(true)添加true来仅返回存储库中的原始结果 .

    您还可以在控制器中的foreach中自己创建一个列表项数组,并仅在列表中添加您真正需要的属性 .

  • 1

    如果你的问题是性能,只需使用默认的findAll() - 方法 .

    \ TYPO3 \ CMS \ Extbase \ Persistence \ Repository中的内置defaultQuerySettings根据分页小部件设置其偏移量和限制,否则设置 .

    如果性能问题仍然存在,则可能必须考虑为数据库请求编写自定义查询,该查询仅请求视图实际显示的数据 . 该过程在文档中描述:https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

相关问题