首頁  >  文章  >  後端開發  >  phalcon 框架軟刪除與實體刪除解決方案

phalcon 框架軟刪除與實體刪除解決方案

桉梓
桉梓原創
2020-10-13 16:07:11224瀏覽

在專案開發中,業務的不同則對資料庫中資料的操作也是不一樣的, 例如有的資料表需要物理刪除資料記錄, 而有的資料表中的記錄需要假刪除(軟刪除),現在所使用的大部分框架都已經實現了對資料的這兩種操作. 那麼phalcon 中如何使用呢?

#phalcon 中的物理刪除 $model->delete();

在phalcon 中使用 $model->delete();預設執行的是物理刪除, 則資料庫中的資料記錄被刪除.

phalcon 中軟體刪除使用

phalcon 中提供了需要多類似鉤子的功能, 我理解的鉤子跟中間件的功能類似. phalcon 中有個方法是添加行為: 

$this->addBehavior()
use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Behavior\SoftDelete;
class Users extends Model{    
    const DELETED = "D";    
    const NOT_DELETED = "N";   
    public function initialize()
    {
        $this->addBehavior(
        new SoftDelete(
        [
            "field" => "status", // 数据库中的字段
            "value" => Users::DELETED, //修改数据库中status的值为D
        ]
            )
        );
    }
}

如此, 在使用$model->delete() 方法的時候, 資料表中對應的欄位修改為 status = 'D' 實現了軟刪除的功能, 但是這樣會有什麼問題? 思考...

#這段程式碼在每一個model 中, 冗餘, 後續優化...那在寫的父類裡面BaseModel去實現, 所有的 model 繼承 BaseModel 都共用, 不錯...

#以上兩點一定要這麼做, 優點大家都懂. 那麼這樣就沒有問題了麼?

使用trail 分離代碼

根據業務的不同, 數據庫中數據的處理也不一樣, 有的model 需要軟刪除, 而有的model 需要物理刪除. 用下面的方法做:

 namespace xxxx;
 use Phalcon\Mvc\Model\Behavior\SoftDelete;
 if (!trait_exists('ModelSoftDeletes')) {    
     trait ModelSoftDeletes{
         public function delete(){
             $this->addBehavior(
                 new SoftDelete([
                 "field" => "is_deleted", 
                 "value" => self::DELETED
                ])
            );
            return parent::delete();
        }
    }
}

在需要使用軟刪除的 model 中使用:

class Userodel extend Model {    
    use ModelSoftDeletes;
    ......
}

ModelSoftDeletes 中的delete方法會覆蓋 Model 中的delete 方法, 在呼叫 $model->delete() 之前給目前的 model新增軟刪除的實作.

以上是phalcon 框架軟刪除與實體刪除解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn