[英]TYPO3 Extbase sort foreign Model (1:n)
我有一個Seminar
和一個Event
model。 研討會與活動具有1:n
的關系。 現在,當我使用$this->seminarRepository->findAll()
select 所有研討會時,我希望研討會按start_date
排序。
我嘗試更改 TCA foreign_sortby
和foreign_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_sortby
: https://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.