簡體   English   中英

TYPO3 Extbase 排序國外 Model (1:n)

[英]TYPO3 Extbase sort foreign Model (1:n)

我有一個Seminar和一個Event model。 研討會與活動具有1:n的關系。 現在,當我使用$this->seminarRepository->findAll() select 所有研討會時,我希望研討會按start_date排序。

我嘗試更改 TCA foreign_sortbyforeign_default_sortby ,我還嘗試將排序直接添加到給定的存儲庫中$query->setOrderings(['events.start_date' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING]); . 這些都沒有奏效。

研討會 Model

<?php
    namespace Vendor\Myext\Domain\Model;

    use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;

    class Seminar extends AbstractEntity
    {
        /**
         * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Myext\Domain\Model\Event>
         */
        protected $events;

研討會 TCA

'events'           => [
    'exclude' => 1,
    'label'   => 'Veranstaltungen',
    'config'  => [
            'type'                => 'inline',
            'foreign_table'       => 'tx_myext_domain_model_event',
            'foreign_field'       => 'seminar',
            'foreign_default_sortby'      => 'ORDER BY tx_myext_domain_model_event.start_date ASC',
    ],
],

好吧,extbase 似乎還沒有實現foreign_default_sortbyhttps://review.typo3.org/c/Packages/TYPO3.CMS/+/61487

由於我的第一個解決方案無法正常工作(有關詳細信息,請參閱評論),我現在通過 PHP usort對事件數組進行排序:

usort($events, function ($a, $b) {
    if ($a->getStartDate() == $b->getStartDate()) {
        return 0;
    }
    return ($a->getStartDate() > $b->getStartDate()) ? +1 : -1;
});

老沒有工作的答案

我的臨時解決方案是使用foreign_sortby ,但僅用於前端,因為foreign_default_sortby在后端工作正常。

研討會 TCA

 $seminarTca = [ // More TCA stuff; missing some array keys in this code 'events' => [ 'exclude' => 1, 'label' => 'Veranstaltungen', 'config' => [ 'type' => 'inline', 'foreign_table' => 'tx_myext_domain_model_event', 'foreign_field' => 'seminar', 'foreign_default_sortby' => 'start_date', 'maxitems' => 999, 'appearance' => [ 'collapseAll' => true, 'expandSingle' => true, 'newRecordLinkAddTitle' => true, 'levelLinksPosition' => 'both', 'useSortable ' => false, ], ], ], ]; if (TYPO3_MODE === 'FE') { $seminarTca['columns']['events']['config']['foreign_sortby'] = 'start_date'; } return $seminarTca;

根據您的描述,這聽起來是不可能的,即使在純 SQL 中也不可能,因為您無法按多個相關行的字段值對單行進行排序。

也許您想將相關事件的最接近開始日期映射到您的研討會 model,然后您可以簡單地使用它在您的SeminarRepository中進行排序:

protected $defaultOrderings = [
    'nextEventStartDate' => QueryInterface::ORDER_DESCENDING,
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM