zoukankan      html  css  js  c++  java
  • ThinkPHP中_after_update、_before_update等的用法

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

    TP系统ThinkModel类里隐藏了几个有用的方法:

    _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都没触发,但在系统的ThinkModel类里却能触发,手册中关于M方法和D方法,发现这句:M方法实例化的时候,默认情况下是直接实例化系统的ThinkModel类。而我平时在写自定义模型层时,习惯在模型层里先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都没触发,但在系统的ThinkModel类里却能触发,手册中关于M方法和D方法,发现这句:M方引用TP手册中关于M方法和D方法的介绍,总结一下:

    D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的ThinkModel基类,同时对于已实例化过的模型,不会重复去实例化。

    D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。

    M方法实例化的时候,默认情况下是直接实例化系统的ThinkModel类。

    --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy 法实例化的时候,默认情况下是直接实例化系统的ThinkModel类。而我平时在写自定义模型层时,习惯在模型层里先M一下自己,找到问题,修改自定义模型层: --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy

    法实例化的时候,默认情况下是直接实例化系统的ThinkModel类。而我平时在写自定义模型层时,习惯在模型层里先M一下自己,找到问题,修改自定义模型层: --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy

  • 相关阅读:
    【repost】JavaScript 运行机制详解:再谈Event Loop
    【repost】学JS必看-JavaScript数据结构深度剖析
    【repost】JavaScript 基本语法
    【repost】前端学习总结(二十三)——前端框架天下三分:Angular React 和 Vue的比较
    【repost】jQuery笔记总结
    【repost】javascript:;与javascript:void(0)使用介绍
    jQuery对象与DOM对象之间的转换方法
    EBS_DBA_问题:主键insert引起的死锁
    BI_开发_问题:ORA-26002: Table DWH.W_XACT_TYPE_D has index defined upon it.
    BI_开发_问题:到target库中的字符为?
  • 原文地址:https://www.cnblogs.com/lxwphp/p/9713205.html
Copyright © 2011-2022 走看看