1. 程式人生 > >ThinkPHP 5過濾資料表中不存在的欄位

ThinkPHP 5過濾資料表中不存在的欄位

最近在做專案的時候,為了方便資料表的新增或者更新操作,有時會重新命名資料表中欄位的名稱(這裡的重新命名只是在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;

}

 

 

轉載自:https://blog.csdn.net/qq_38148394/article/details/80247617