最近在做项目的时候,为了方便数据表的添加或者更新操作,有时会重新命名数据表中字段的名称(这里的重命名只是在Model层,而不是在数据表里),在网上查询了一下,又看了一下ThinkPHP 5完全开发手册,有两种方法可以解决这个问题。
我出现的问题如下:
这里的old_goods_attr
是数据表中不存在的,但是因为程序需要添加的。
这时我的代码是:
public function edit()
{
if(request()->isPost()){
$data=input('post.');
$update=model('goods')->save($data);
if(!$update){
$this->success('修改商品成功!','lst');
}else{
$this->error('修改商品失败!');
}
return;
}
解决方法有两个:
方法一
在你的模型类定义中,设置 field 属性为 true,如下:
class User extend Model {
protected $field = true;
}
方法二
如果需要过滤非数据表字段的数据,可以使用:
$user = new User($_POST);
// 过滤post数组中的非数据表字段数据
$user->allowField(true)->save();
我利用方法二修改后,还是不行,会报下面的错误:
这是由于我的数据添加修改都用到了save()提交到数据库,我这里修改数据,这是只需要修改为:
$user->allowField(true)->isUpdata(ture)->save();
这时完整的代码为:
public function edit()
{
if(request()->isPost()){
$data=input('post.');
$update=model('goods')->allowField(true)->isUpdate(true)->save($data);
if(!$update){
$this->success('修改商品成功!','lst');
}else{
$this->error('修改商品失败!');
}
return;
}
到这里,就成功了!