Magento2.3.3自定义网格批量操作提示Zend_Db列不存在异常如何解决
问题原因
该报错是由于Magento Ui网格的批量操作过滤器无法匹配到你自定义表的主键字段导致,哪怕你已经配置了primaryFieldName,只要存在以下配置缺失就会触发报错。
解决方案
步骤1:核对数据源主键配置
打开你的productdesigner_source_order_listing.xml,检查<dataSource>节点下的primaryFieldName值,必须和你的自定义表主键字段名完全一致,示例配置:
<dataSource name="productdesigner_source_order_listing_data_source"> <argument name="dataProvider" xsi:type="configurableObject"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <!-- 此处替换为你自定义表的真实主键名,如主键为design_order_id就填对应值 --> <item name="primaryFieldName" xsi:type="string">id</item> <item name="requestFieldName" xsi:type="string">id</item> <!-- 其余原有配置保留 --> </item> </argument> </argument> </dataSource>
步骤2:补充主键列到网格列配置
在同一个xml的<columns>节点下,必须显式添加主键对应的列,不需要前端展示可以设为隐藏:
<columns name="productdesigner_source_order_columns"> <!-- 主键列必须存在,不可省略 --> <column name="id"> <!-- 此处name和主键字段名保持一致 --> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">ID</item> <item name="visible" xsi:type="boolean">false</item> <!-- 设为false则前端网格不显示,不影响批量操作取值 --> <item name="filter" xsi:type="string">text</item> <item name="sortOrder" xsi:type="number">10</item> </item> </argument> </column> <!-- 其余原有列配置保留 --> </columns>
步骤3:验证自定义资源模型的主键配置
检查你的自定义表对应的资源模型类(路径为Biztech/Integration/Model/ResourceModel/SourceDesignOrders.php),确认_construct方法中第二个参数和主键字段名一致:
<?php namespace Biztech\Integration\Model\ResourceModel; class SourceDesignOrders extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { protected function _construct() { // 第二个参数为自定义表主键字段名,必须和上述配置一致 $this->_init('你的自定义表实际表名', 'id'); } }
步骤4:清理缓存生效
执行命令清理Magento缓存后再次测试:
php bin/magento cache:clean
内容的提问来源于stack exchange,提问作者Shefali
相关产品推荐
相关产品推荐

