关于ThinkPHP的M方法和D方法

发布时间:2016/01/28 09:11栏目:ThinkPHP

在ThinkPHP中,有M方法和D方法,关于其中区别有挺多人不太清楚的,而且对于控制器C和模型M的定义不太清楚,所以今天就一并说了吧。

先说说控制器C和模型M吧。

大家会发现,C控制器里也可以使用数据库的一些操作,比如以下的。

<?php
namespace Home\Controller;
use Think\Controller;
class ZceshiController extends Controller {
    public function index(){
        M('tablename') -> select();
        M('tablename') -> where('id = 1') -> delete();
        $data['user'] = 'toilove.com';
        M('tablename') -> save($data);
    }
}



模型M里面也可以这样,所以很多人觉得模型M可有可无。

其实不然,控制器C可以使用M的一些基础操作,但是它也仅限于使用增删查改,即 select()、delete()、save()、find() 等等ThinkPHP自带的操作。

如果你有个很复杂的操作(虽然很复杂的操作一般是由很简单的操作集合起来),控制器C就爱莫能助了,你只能自己编写那个复杂操作。

这个时候,模型M的作用就体验就出来了,模型M的作用其实就是一个自定义的复杂方法,你可以定义一个方法,如下:

<?php
namespace Home\Model;
use Think\Model;
class TablenameModel extends Model{
    public function update_select(){
        $data['user'] = 'toilove.com';
        $this -> save($data);
        return $this -> where('id = 1') -> select();
    }
}



这个方法是先更新,后查询,一个很简单的方法,在实际中,肯定不是这样,我只是演示一下,实际中应该会有GET和POST的字段然后有一系列操作。

当你使用模型M之后,你就可以调用你自定义的方法了。

所以说,模型M是数据操作的复杂方法合集,如果是简单查询,单单使用控制器C的M方法就可以了。

那这个时候呢,就要说说D()方法和M()方法。

大家知道可以使用M、D两个方法对数据库的数据进行操作。

这两者的区别就在于,如果你按照上面我说的,使用了模型M定义了一个复杂操作,比如上面的 update_select() ,那么这个时候,你就不能使用M方法去读取了。

因为:

M方法会直接调用公共模块的Model类,这个Model类只有基本的 select()、delete()、save()、find() 等等基础操作。

D方法则会先查找模块下的model类,如果找不到那个TablenameModel.class.php,就会转为使用M方法的系列,如上条所写。

所以说呢,大家应该明白这两种方法的使用时候了。

我们要调用 TablenameModel.class.php 里面定义的 update_select() 方法,就得使用 D方法,M方法是不会访问TablenameModel.class.php的。

好了,以上就是关于 M方法和D方法的使用区别。

也是模型M和控制器C关于数据操作方面的一些区别。

大家可以实践一下,能够更加熟悉。

版权说明:本文为【Toilove个人博客 - 一个菜鸟程序员的学习旅程】原创文章,转载请说明出处。
文章地址:http://toilove.com/article/39.html
Notice最新公告2016/11/11 15:44

光棍节快乐~

新版本的静态页面已经快要完工了,界面效果个人感觉不错。

今年一定要更新博客!

Search内容搜索
Abuot关于程序开源程序提供下载学习
Link友情链接欢迎各位站长交换链接