ThinkPHP中_after_update、_before_update等的用法

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112866.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二叉树abcdefghij先序遍历_二叉搜索树的查找递归算法

    二叉树abcdefghij先序遍历_二叉搜索树的查找递归算法给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题解深搜/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() :

    2022年8月8日
    7
  • 刷流量和刷点击率的方法探讨

    本文主要用到的工具软件有《网页自动操作通用工具》或《网页自动刷新监控工具》,其中《网页自动操作通用工具》包含《网页自动刷新监控工具》所有功能,所以主要以前者为例说明。请自行在网上搜索和下载软件。许多朋友需要用到提高流量或点击率,比如:提高自己博客访问量,小说访问量,视频点击率,论坛帖子点击率等。这样就可以提高自己的排名或在网…

    2022年4月13日
    139
  • 关于将dede织梦data目录迁移出web目录

    关于将dede织梦data目录迁移出web目录

    2021年9月19日
    51
  • Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略[通俗易懂]

    Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略[通俗易懂]Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略目录关于OpenCV简介OpenCV应用领域1、计算机视觉领域方向2、计算机操作底层技术安装OpenCV的的两种方法T1、使用whl文件法T2、直接命令法T3、Anaconda环境下安装OpenCV常见函数、方法0、基本库函数1、图像基本运算2、Image.open和cv2.imread的区别及其转换相关文章:Py

    2022年6月23日
    38
  • Android 浏览器打开APP中的Activity

    Android 浏览器打开APP中的Activity具体实现方式请看博客:jiangwei0910410003上面的示例打开了MainActivity,如果要打开很多不同的Activity,就这样干:

    2022年5月14日
    43
  • jetbrains全家桶激活码 淘宝上卖的怎么来的【2021最新】

    (jetbrains全家桶激活码 淘宝上卖的怎么来的)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号