CodeIgniter插入数据报错:无可插入数据,同函数在其他模块可用
问题原因
报错「There is no data to insert.」的核心原因是模型允许的字段与控制器传入的字段不匹配,导致插入数据被框架过滤为空:
- 模型中
$allowedFields定义的白名单字段是['page_title','page_status'] - 控制器构造的插入数组键名是
['post_title'=>$page_title,'post_status'=>$page_status],和白名单完全不匹配 - 调用
insert($data,false)时,框架会自动过滤掉不在白名单中的字段,最终无合法数据可插入,触发报错
修复方案
任选以下一种方式即可解决问题:
方式一:修正控制器的字段名(推荐,保持模型配置不变)
将控制器中的数组键名改为模型允许的字段:
$page_data_to_add = array('page_title' => $page_title, 'page_status' => $page_status); $data_added = $this->page->store($page_data_to_add);
方式二:更新模型的白名单字段
如果业务需要保留post_title和post_status作为字段名,修改模型的$allowedFields:
protected $allowedFields = ['post_title','post_status'];
补充说明:你的store函数在其他场景能正常运行,是因为那些场景中传入的字段名与对应模型的allowedFields匹配,当前场景仅因字段名不一致导致过滤问题,修正后即可正常插入数据。
内容的提问来源于stack exchange,提问作者Prolay Panda
相关产品推荐
相关产品推荐

