1.连接数据库

Thinlphp内置了抽象数据库访问层,把不同的数据操作封装起来。我们只需要调用公共的DB类进行操作即可。DB类会自动调用相应的数据库驱动来处理。

在应用目录/common/conf/config.php中设置

    // mysql全局配置定义
'DB_TYPE'=>'mysql', //数据库类型
'DB_HOST'=>'localhost', //服务器地址
'DB_NAME'=>'test', //数据库名
'DB_USER'=>'root', //用户名
'DB_PWD'=>'', //密码
'DB_PORT'=>3306, //端口
'DB_PREFIX'=>'', //数据库表前缀
// PDO专用配置
// ps:3.2.3数据库类和驱动采用PDO重写了,因此无论是什么数据库都是基于PDO实现的,所以DB_TYPE不再支持PDO设置
// 3.21 DB_TYPE填写pdo
// 3.23填写准确的类型mysql
'DB_TYPE'=>'mysql', //数据库类型
'DB_USER'=>'root', //用户名
'DB_PWD'=>'', //密码
'DB_PREFIX'=>'', //数据库表前缀
'DB_DSN'=>'mysql:host=localhost;dbname=test;charset=UTF8',

应用目录/Home/Controller/ModelController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
// 要引用Model模块
use Think\Model;
class ModelController extends Controller {
public function test($user,$pass){
echo "user:".$user."<br/>pass:".$pass;
}
public function model1(){
// 实例化一个Model对象
$user=new Model('user1');
var_dump($user->select());
}
}

2.实例化模型

1.使用Model基类

<?php
namespace Home\Controller;
use Think\Controller;
// 要引用Model模块
use Think\Model;
class ModelController extends Controller {
public function model1(){
// Model 基类可以传递三个参数:
// Model(['模型名'],['数据表前缀'],['数据库连接信息']);
// 实例化一个Model对象,传一个数据表名
// ********方法一***********
$user=new Model('elector','','mysql://root:@localhost/test');
//显示变量结构
var_dump($user);
// ********方法二***********
$user=new Model('user1');
// 打印出所有数据
var_dump($user->select());
}
}

2.使用M()方法

$Demo = new Model();那么它等价于 $Demo = M();

  // 使用M方法不需要引入命名空间 (use Think\Model;)
$user=M('elector');
var_dump($user->select());

3.模型定义

  1. Model类的名字要与Controller类的名字一致
  2. 在model类中这个类的名字代表要查询的表名字
  3. 在controller类中要引用model类
  4. 全部设置好了,就可以在浏览器访问了

在Home目录/Model下创建一个model类.(User1Model.class.php)

<?php
namespace Home\Model;
use Think\Model;
// 注意:这个User1Model的意思是要查询的是表名为user1
class User1Model extends Model
{
}

在Home目录/Controller下创建一个Controller类(User1Controller.class.php)

<?php
namespace Home\Controller;
use Think\Controller;
// 注意:要引用model类
use Home\Model\User1Model;
class User1Controller extends Controller {
public function model1(){
$user=new User1Model();
var_dump($user->select());
}
}

在common/conf/config.php

//页面Trace,调试辅助工具
'SHOWPAGETRACE' =>true,

对表名、前缀、附加数据库修改。代码如下:

model/User1Model.class.php

<?php
namespace Home\Model;
use Think\Model;
// 注意:这个User1Model的意思是要查询的是表名为user1
class User1Model extends Model
{
// 1.我们查询语句为:SELECT * FROM `test.user1`
// 重新定义表前缀
protected $tablePrefix = 'abc_';
// 重新定义表名
protected $tableName = 'abc';
// 重新定义完整的带前缀的表名
protected $trueTableName = 'user1';
// 修改附加数据库名
protected $dbName = 'tp';
}

4.使用D()方法

ThinkPHP 提供了 D()方法来直接是实例化模型类,并且还可以免去引入命名空间等操作

model/User1Model.class.php

<?php
namespace Home\Controller;
use Think\Controller;
// 注意:要引用model类
use Home\Model\User1Model;
class User1Controller extends Controller {
public function model1(){
//实例化UserModel类
$user=D('user1');
var_dump($user->select());
}
}

PS:使用 D()方法比直接使用模型类更加的智能.

如果在\Home\Model\UserModel 找不到该模型类,那么就会去公共模块下找\Common\Model\UserModel 去找。

如果还找不到,就会直接实例化基类 Model()类,也就是等同于使用 M()方法

区别:

  1. D就是实例化一个基于Model文件的Model
  2. M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在

5.使用原生的 SQL 语句进行操作数据库

        $user1=M();
var_dump($user1->query('select * from user1 where id=1'));

【三十二】thinkphp之连接数据库、实例化模型的更多相关文章

  1. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  3. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  4. COJ968 WZJ的数据结构(负三十二)

    WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...

  5. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  6. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  7. Gradle 1.12用户指南翻译——第三十二章. JDepend 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)

    开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...

  9. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  10. ASP 三十二条精华代码 (1)

    ASP 三十二条精华代码 (1) 2009-08-10 09:53:03  www.hackbase.com  来源:互联网 1. oncontextmenu="window.event.r ...

随机推荐

  1. GM Bosch Vetronix HP Tech 2 with CANDI

    Being I have owned some of these units. Can offer some advice… GM Tech 1, GM Tech 1a. Early and latt ...

  2. RTMP HLS HTTP 直播协议一次看个够

    直播从2016年一路火到了2017年,如今要在自己的App里加入直播功能,只要找一个现成的SDK就行了,什么拍摄.美颜.推流,一条龙服务.不过作为直播身后最重要的部分:推流协议,很多人并不是很清楚.如 ...

  3. ES6知识整理(7)--Set和Map数据结构

    (文章会同步到博客园,技术类文章还是该让搜索引擎察觉比较好) Set构造函数 初始化一个值不重复的数组,适合做数组去重. 2种数组去重的方法: 这里再说下Array.from(),表示以一个类数组|| ...

  4. P1382 楼房

    P1382 楼房 每个矩形拆成2个坐标按$x$轴排序,蓝后$multiset$维护最高值. #include<iostream> #include<cstring> #incl ...

  5. P2233 [HNOI2002]公交车路线

    洛咕原题 dp->矩阵乘法 首先我们可以得出一个状态转移方程 f[i][j]=f[i-1][j-1]+f[i-1][j+1] 蓝后发现,我们可以把这转化为一个8*8的转移矩阵 然后跑一遍矩阵快速 ...

  6. MySql数据库表操作(二)

    一.增加表记录: insert [into] tab_name (field1,field2....) values (values1,values2....) , (values1,values2. ...

  7. 接口自动化(atp,utp)

    atp:数据驱动 utp:代码驱动 pip install -r file.txt #安装文件里面有的模块 pip freeze > file.txt #导出你已经安装好的第三方模块

  8. git download error processing

    git clone git@github.com:happyfish100/fastdfs.git 提示下列信息: Warning: Permanently added 'github.com,192 ...

  9. Django创建超级用户出现错误

    如果运行python manage.py createsuperuser出现一大堆错误代码 解决方案: 1.检查settings.py中的DATABASE配置确定正确性 2.执行python mana ...

  10. Android 源码编译 指定userdata.img、system.img、cache.img容量大小【转】

    本文转载自:https://blog.csdn.net/baodinglaolang/article/details/49791041 修改build/target/board/generic_x86 ...