ThinkPHP中_after_update、_before_update等的用法


https://blog.csdn.net/aslackers/article/details/50339163

TP系統\Think\Model類里隱藏了幾個有用的方法:

_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select。。。。。。

但是在手冊里並沒有列出來,只有在源碼中才能看到。新建個測試類ArticleModel.class.php

class ArticleModel extends Model {
 
    protected $article = '';
 
    public function _initialize(){
        $this->article = M('Article');
    }
 
    public function updateArt($id = 0, $data = array()){
         $this->article->where('id = ' . $id)->save($data);
    }
 
    protected function _before_update(&$data,$options) {
        $data['contents'] = 'ppppppp';
    }
 
    protected function _after_update($data,$options) {
        $this->article->add($data);
    }
}
在控制器里調用

public
function update() { $id = 1; $data['title'] = 'ttt'; D('Article')->updateArt($id,$data); }

結果發現,_before_update和_after_update都沒觸發,但在系統的\Think\Model類里卻能觸發,手冊中關於M方法和D方法,發現這句:M方法實例化的時候,默認情況下是直接實例化系統的\Think\Model類。而我平時在寫自定義模型層時,習慣在模型層里先M一下自己,找到問題,修改自定義模型層: --------------------- 本文來自 aslackers 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy

class ArticleModel extends Model {
 
    public function updateArt($id = 0, $data = array()){
         $this->where('id = ' . $id)->save($data);
    }
 
    protected function _before_update(&$data,$options) {
        $data['contents'] = 'ppppppp';
    }
 
    protected function _after_update($data,$options) {
        $this->add($data);
    }
}

 

結果發現,_before_update和_after_update都沒觸發,但在系統的\Think\Model類里卻能觸發,手冊中關於M方法和D方法,發現這句:M方引用TP手冊中關於M方法和D方法的介紹,總結一下:

D方法可以自動檢測模型類,如果存在自定義的模型類,則實例化自定義模型類,如果不存在,則會實例化系統的\Think\Model基類,同時對於已實例化過的模型,不會重復去實例化。

D方法實例化模型類的時候通常是實例化某個具體的模型類,如果你僅僅是對數據表進行基本的CURD操作的話,使用M方法實例化的話,由於不需要加載具體的模型類,所以性能會更高。

M方法實例化的時候,默認情況下是直接實例化系統的\Think\Model類。

--------------------- 本文來自 aslackers 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy 法實例化的時候,默認情況下是直接實例化系統的\Think\Model類。而我平時在寫自定義模型層時,習慣在模型層里先M一下自己,找到問題,修改自定義模型層: --------------------- 本文來自 aslackers 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy

法實例化的時候,默認情況下是直接實例化系統的\Think\Model類。而我平時在寫自定義模型層時,習慣在模型層里先M一下自己,找到問題,修改自定義模型層: --------------------- 本文來自 aslackers 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM