列表加载正常,新列“供应商名称”也有值;一输入筛选条件就报:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'supplier_name' in 'where clause'
显示值可能是 DataProvider 后处理出来的,或者 SQL 中只是 select alias。筛选器会把字段放进 WHERE,此时数据库需要知道它属于哪张表。
先看最终SQL
确认 supplier 表是否已 join、真实列名是什么、join 发生在 addFieldToFilter 之前还是之后。若真实字段是 s.name,把筛选映射到它:
$collection->addFilterToMap('supplier_name', 's.name');
映射应放在 collection/data provider 的合适位置,而不是在控制器里解析筛选参数。多个表都有 name 时必须带 alias,避免从 Unknown column 变成 Ambiguous column。
如果一件商品可能关联多个供应商,普通 join 会让 Grid 行重复,筛选和分页数量都不准确。这时要先决定展示规则:主供应商、聚合文本,还是子查询。不能只加 GROUP BY 压掉重复,因为 count SQL 和导出仍可能错。
验证范围
文本包含、精确值、空值筛选各测一次,再测试排序、分页、导出和 Mass Action。Grid 列“能看到”只是第一关,所有基于 collection 的动作都必须使用同一字段语义。

