给订单加了外部单号,详情页能看到,sales_order 也有值,但列表新列始终为空。原因通常是后台 Grid 并不直接查询订单实体表。

先确认字段落在哪张表

SELECT entity_id, increment_id, external_number
FROM sales_order
WHERE entity_id = :order_id;

SELECT entity_id, increment_id, external_number
FROM sales_order_grid
WHERE entity_id = :order_id;

字段只在 sales_order,XML 把列画出来也拿不到数据。应通过 declarative schema 增加 Grid 字段,并在订单保存或异步刷新时同步。不要为了省代码在列表 collection 对大表做无索引实时 join。

数据有了,列仍不见,再查 UI Component

检查 view/adminhtml/ui_component/sales_order_grid.xml 合并结果,列名是否与数据源键一致。看 Grid AJAX 响应:JSON 已有字段但页面没有,问题在前端列配置;响应没有,继续查数据源。

管理员 bookmark 会保存旧列状态

后台保存用户的列显示、排序和筛选。新列部署后,旧 bookmark 可能继续隐藏它。先在 Columns 菜单确认,再针对当前用户重置视图,不要清掉所有管理员配置。

最后测试新订单与历史订单。历史回填应分批且可重复执行。SQL、Grid AJAX 和页面三处一致,筛选与导出也能工作,才算完成。