You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何启用IRRE列元素排序并使前端按该顺序展示?

问题解答

一、你的TCA配置没问题

你当前的IRRE排序配置是正确的:

  • Inventory的items字段设置了foreign_sortby = sorting,意味着关联的Items记录会用自身的sorting字段存储相对排序顺序
  • appearance.useSortable = true开启了拖拽排序功能
  • Items表的ctrl区也配置了sortby = sorting,保证排序字段可用

IRRE里的排序操作已经正常把顺序写入了数据库的tx_vendorgame_domain_model_items.sorting字段(对应当前Inventory的关联记录)。

二、前端展示时按排序顺序输出的方法

问题出在前端获取数据时没按保存的sorting字段排序,以下是两种常见场景的处理方式:

1. 使用Extbase框架(Typo3常规开发)

方式一:在Repository方法里指定排序

在InventoryRepository的查询方法中添加排序条件:

public function findByUid($uid)
{
    $query = $this->createQuery();
    $query->matching($query->equals('uid', $uid));
    // 让关联的items按sorting字段升序排列
    $query->setOrderings([
        'items.sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
    ]);
    return $query->execute()->getFirst();
}

方式二:在模型关联注解里配置默认排序

在Inventory模型的items属性注解中添加排序规则,这样每次获取items都会自动按顺序排列:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Game\Domain\Model\Items>
 * @ORM\OneToMany(targetEntity="\Vendor\Game\Domain\Model\Items", mappedBy="inventory")
 * @ORM\OrderBy({"sorting" = "ASC"})
 */
protected $items;

2. 直接用SQL查询

如果是手写SQL语句获取数据,关联查询时加上ORDER BY即可:

SELECT i.*
FROM tx_vendorgame_domain_model_inventory inv
JOIN tx_vendorgame_domain_model_items i ON inv.uid = i.inventory
WHERE inv.uid = [你的Inventory UID]
ORDER BY i.sorting ASC;

内容的提问来源于stack exchange,提问作者Starzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:07:34