ThinkPHP 5 過濾數據表中 報不存在的字段

轉博客 :https://blog.csdn.net/qq_38148394/article/details/80247617

最近在做項目的時候,爲了方便數據表的添加或者更新操作,有時會重新命名數據表中字段的名稱(這裏的重命名只是在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();
1
這時完整的代碼爲:

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;

}
 

 

$ret = $model->isUpdate(false)->allowField(true)->save($data);

第二種解決字段不存在
直接在model層加上這一句
tp5模型忽略數據表不存在的字段
protected $field = true;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章