关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴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日志
关于thinkphp框架中模型笔记的更多相关文章
- 浅析Thinkphp框架中运用phprpc扩展模式
浅析Thinkphp框架中应用phprpc扩展模式 这次的项目舍弃了原来使用Axis2做web服务端的 方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc ...
- Thinkphp框架中自定义修改success和error页面
Thinkphp框架中自定义修改success和error页面 Thinkphp框架的默认success和error太难看,可以自定义设置,步骤如下: (注意:TP原框架中的success跳转有问题, ...
- thinkPHP框架中执行原生SQL语句的方法
这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...
- 制作类似ThinkPHP框架中的PATHINFO模式功能(二)
距离上一次发布的<制作类似ThinkPHP框架中的PATHINFO模式功能>(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.ht ...
- thinkphp 框架中的一部分方法解析
1 thinkphp 框架 中判断输入的数值和数据库中的数值是否一致 首先 需要在view文件夹下建一个模板 名为zhuce.html <html> <head> &l ...
- 制作类似ThinkPHP框架中的PATHINFO模式功能
一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...
- thinkphp框架中session常识
在看别人代码时候,发现他,在tp框架中使用session没有些session_start();然后我去查看了手册初始化设置方法 无需手动调用,在App类的初始化工作结束后会自动调用,通常项目只需要配置 ...
- thinkphp框架中“关联操作”的完整定义详解
在复杂的关联操作中,如果要给关联定义增加可选的属性,我们可以采用完整定义的方式. 完整定义的格式是: protected $_link = array( '关联表名1' => arr ...
- thinkphp框架之模型(数据库查询)
1. 模型定义 文件名称必须是 表名+Model.class.php 例如:UserModel.class.php namespace Home\Model; //该模型类的命名空间 use Thin ...
随机推荐
- IDEA基础设置
1.防止自动更新 去掉 2.文件的隐藏 3.字体的修改: 4.字体格式 5.快捷键设置 --写出方法名,用Ctrl+Shift+Enter键补全. --移动当前行代码,用Ctrl+Shift+上.下. ...
- linux 操作系统级别监控 df 命令
df命令可以查看当前系统磁盘空间的使用情况 命令:df -h du -sh * 查看目录文件暂用磁盘大小 如果磁盘空间不够,需清理磁盘 磁盘速度测试,如果磁盘性能不好,性能测试数据会不准确(读写速度) ...
- Micrometer 快速入门
Micrometer为最流行的监控系统提供了一个简单的仪表客户端外观,允许仪表化JVM应用,而无需关心是哪个供应商提供的指标.它的作用和SLF4J类似,只不过它关注的不是Logging(日志),而是a ...
- Hadoop 之 Hadoop2.0
1.Hadoop2.0与1.0 答:Hadoop2.0之后的版本移除了原有的JobTracker和TaskTracker,改由Yarn平台的ResourceManager负责集群中所有资源的管理和分配 ...
- Python 之父的解析器系列之七:PEG 解析器的元语法
原题 | A Meta-Grammar for PEG Parsers 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公众 ...
- mybatis-generator生成数据对象
mybatis-generator生成数据对象 步骤一:在pom文件中添加build的插件 <build> <finalName>doudou</finalName> ...
- 23种设计模式之代理模式(Proxy Pattern)
在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代理对象代替 ...
- Spring MVC 梳理 - handlerMapping和handlerAdapter分析
参考图片 综上所述我们来猜测一下spring mvc 中根据URL找到处理器Controller中相应方法的流程 ①:获取Request的URL ②:从UrlLookup这个map中找到相应的requ ...
- mysql replace into使用
使用mysql插入数据时,我们通常使用的是insert into来处理,replace into有时可以替代insert into功能,但replace into也有自己的用法 准备一张测试表: CR ...
- github- 优秀资源总结
权限控制篇: SpringMVC-Mybatis-Shiro-redis-0.2-master:https://www.sojson.com/shiro / https://m.imooc.com/a ...