Thinkphp中M()和D()方法的具体使用和区别:
区别:
M()方法比D()方法效率高,对数据进行简单的CRUD操作,没有复杂的业务逻辑的时候适合用M()方法。
D()方法比M()方法功能更加强大,D()方法会去调用Model中的模型类文件,能对数据进行自动验证,在调用的自定义模型类中进行处理复杂的业务逻辑等强大的操作,使用情况根据功能复杂程度而定,复杂功能用D()方法,D()方法需要配合create()方法一起使用。
M('表名') //实例化一个模型
D('表名') //实例化一个模型,并去查找 自定义的模型类,对数据进行验证匹配,如果没有则取调用M()方法。
M()<?php
namespace Admin\Controller;
use Think\Controller;
class TestController extends Controller{
public function index(){
$test = M('test'); //实例化模型,传入数据库表名
$test->select(); //获取数据库test表的所有数据的结果集
}
}
D()<?php
namespace Admin\Controller;
use Think\Controller;
class TestController extends Controller{
public function index(){
$test = D('test'); //实例化模型,传入数据库表名
$data['email'] = 'test@qq.com';
$data['phone'] = '123456789';
//$test->create($data)进行数据验证操作,这一步回去调用模块下的Model文件夹中的TestModel.class.php文件
//再进行数据验证码,这里的$data['email']和$data['phone']中的数组键必须和数据库表的字段一致,否则会出错
if($test->create($data)){
//添加成功,并进行跳转到相应控制器中的方法
if($test->add()){
$this->success('添加成功!',U('控制器/方法'));
}else{
$this->error('添加失败!');
}
}else{
//TestModel.class.php文件中的规则对$data数组数据进行验证,不通过的时候进行失败提示
$this->error($test->getError());
}
}
}
?>
//TestModel.class.php 复杂逻辑处理验证文件代码,这个文件命名中必须是 表名Model.class.php 的规则,不然文件规则会失效
namespace Admin\Model;
use Think\Model;
class TestModel extends Model{
protected $_validate = array(
array('email','require','邮箱不能为空!'), // 邮箱必须
array('email','','email名称已经存在!',1,'unique',1), // 验证email是否已经存在
array('phone','require','phone不能为空!'), // phone必须
array('phone','','phone名称已经存在!',1,'unique',1), // 验证phone是否已经存在
);
}