模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记。

0x01 模型类简介

数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名,

把一张表对应为一个类,其中一条数据对应一个对象

如果我们对该表的模型没有特殊操作的话可以不用建立该模型,但C层和V层必须有

模型类简单代码:

<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model
{
    public $tablePrefix ='';
    public $tableName='user';
    public $trueTableName='user';
    public $dbName='snatch';

    public function text() {
        print_r($this->db->query('select * from segment limit 1'));
        return "这是模型";
    }
}
?>

控制类调用模型实例:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
echo "<meta charset='utf-8'>";
echo "hello world.";
$user=D('user');
$arr=$user->where(array('uid'=>'2','password'=>'fcea920f7412b5da7be0cf42b8c93759'))->order(array('uid'=>'desc'))->limit(1)->group('uid')->select();
echo $user->getLastSql();
print_r($user->query('select * from segment limit 1'));
trace('',$user->getLastSql(),'user');
trace('hahah',$user->text(),'user');
$u = D();
print_r($arr);
echo "<h1>_____________________________</h1>";
print_r($u->query("select * from case_text limit 0"));
$user->select(array('where'=>'uid>1','order'=>'password asc'));

}

模型不得不提一下D 和 M 函数。

D函数和M函数是快速初始化模型的Think PHP内置方法。

D函数和M函数的区别是,M函数可以初始化一个没有定义模型类的模型,也就是说M函数在执行原生SQL的时候效率更高

$user= D('user');

这句代码代表初始化Model下面的UserModel类。

D函数实例化的是 你当前项目的Lib/Model下面的模块

如果该模块不存在的话  直接返回实例化Model的对象(意义就与M()函数相同)

而M 只返回 实例化 Model的对象..它的$name参数 作为数据库的表名来处理对数据库的操作

下面来举例实例化模型类的三种方法

0x02 模型类的实例化

三种方法 new直接实例化,M函数和D函数,重点区别下M和D函数的区别和意义。

new实例

用new的方式:需要自己创建模型文件,需要哪个表的模型,就去建哪个表的Model:在Home/Model/中新建xxxModel.class.php

<?php
namespace Home\Model;
use Think\Model;
class InfoModel extends Model
{

}

对应控制器类文件:

function ShowAll()
{
    $info=new \Home\Model\InfoModel();  //必须是绝对路径  从初始命名空间开始
    var_dump($info);
}

D函数

不用建模型文件,实例化父类Model的对象

$info = D("Info");  //造的是父类Think\Model的对象
 var_dump($info);

M函数

实例化父类Model

$info = M("Info");

可以直接调用父类Model里边的属性,获得数据库相关操作,但没有具体表的数据

这样就可以操作Info表数据

D函数和M函数支持原生SQL查询:

public function index(){
        echo "<meta charset='utf-8'>";
        echo "hello world.";
        $user=D('user');
        $arr=$user->query('select count(*) from word_a');
        trace('SQL',$user->getLastSql(),'user');
        print_r($arr);
    }
//生成SQL:
select count(*) from word_a:SQL

public function index(){
        echo "<meta charset='utf-8'>";
        echo "hello world.";
        $user=M();
        $arr=$user->query('select count(*) from word_a');
        trace('SQL',$user->getLastSql(),'user');
        print_r($arr);
    }
//生成SQL:
select count(*) from word_a:SQL

查询多条数据:

// 根据主键获取多个数据
$list = User::all('1,2,3');
// 或者使用数组
$list = User::all([1,2,3]);
foreach($list as $key=>$user){
    echo $user->name;
}
// 使用数组查询
$list = User::all(['status'=>1]);
// 使用闭包查询
$list = User::all(function($query){
    $query->where('status', 1)->limit(3)->order('id', 'asc');
});
foreach($list as $key=>$user){
    echo $user->name;
}

数据表定义

在ThinkPHP的模型里面,有几个关于数据表名称的属性定义:

模型相关配置选项

字段定义

可以通过设置DB_FIELDS_CACHE 参数来关闭字段自动缓存,如果在开发的时候经常变动数据库的结构,而不希望进行数据表的字段缓存,可以在项目配置文件中增加如下配置:

// 关闭字段缓存
'DB_FIELDS_CACHE'=>false
注意:调试模式下面由于考虑到数据结构可能会经常变动,所以默认是关闭字段缓存的。

全局配置定义

常用的配置方式是在应用配置文件或者模块配置文件中添加下面的配置参数:

//数据库配置信息

'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => '127.0.0.1', // 服务器地址
'DB_NAME' => 'thinkphp', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123456', // 密码
'DB_PORT' => 3306, // 端口
'DB_PARAMS' => array(), // 数据库连接参数
'DB_PREFIX' => 'think_', // 数据库表前缀
'DB_CHARSET'=> 'utf8', // 字符集
'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志

最新文章

  1. tweenmax.js 文档
  2. Word Break II
  3. Asp.net 实现Session分布式储存(Redis,Mongodb,Mysql等) sessionState Custom
  4. PowerDesigner15中定义varbinary(max)列
  5. Java for LeetCode 203 Remove Linked List Elements
  6. iOS xib传值--定义方法传值
  7. task2
  8. Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端
  9. iOS动画——弹窗动画(pop动画)
  10. inferred 和 freefrom
  11. IE下的firebug调试利器
  12. 【Demo 0015】位置服务及地图
  13. [Lucene]-Lucene基本概述以及简单实例
  14. CSS input type=&quot;number&quot;出现上下箭头时解决方案
  15. 前端到后台ThinkPHP开发整站(3)
  16. css3中空格和&gt;的区别
  17. Java执行jar总结
  18. 【XSY3147】子集计数 DFT 组合数学
  19. linux的ls命令中文件颜色含义
  20. Python开发 基礎知識 3.類別&amp;方法 (bool &amp; str) (未完待續)

热门文章

  1. java工作流快速开发之授权代办的设计
  2. 使用 Docker 安装 showdoc
  3. 三句话告诉你break、return、continue!
  4. Linux环境下MySQL的安装、密码策略、忘记密码后的破解及用户授权等。
  5. JS实现数组去重的方法
  6. 基于MFCC的语音数据特征提取概述
  7. Linux 中文打字软件 gtypist 光标错位解决
  8. SpringCloudEureka入门
  9. SUSE Ceph 增加节点、减少节点、 删除OSD磁盘等操作 - Storage6
  10. Jetpack系列:应用内导航的正确使用方法