thinkphp框架之模型(数据库查询)
1. 模型定义
文件名称必须是 表名+Model.class.php 例如:UserModel.class.php
namespace Home\Model; //该模型类的命名空间
use Think\Model; //下面的模型类需要继承Model基类,Model是系统定义的模型类,在 Think\Model 这个命名空间中
class UserModel extends Model
{
}
文件中的类名是跟文件名中的“表名”是一致的(这一项是必须的如果不一致在控制器中就会找不到这个模型类)。
类名与表名的对应关系是(注意:模型名中对应每个大写对应的数据表的前面都有一个下划线,如下第二行)
| 模型名 | 约定对应数据表(如果数据库的前缀是think_) |
| UserModel | think_user |
| UserTypeModel | think_user_type |
2. 模型实例化
2.1 直接实例化
2.1.1 不带参数实例化 $user=new \Home\Model\UserModel();
2.1.2 带参数实例化 $user=new \Home\Model\UserModel(['模型名'],['数据表前缀'],['数据库连接信息']);
上述两种方法的区别在于,第一种在实例化的时候回去读取默认配置(例如在模型中的配置或者是模块中的数据库配置),而第二种方法是直接读取传入参数的数据库配置
模型名是对应的数据库中的去掉前缀的表名,如果不指定这会读取模型类的名称但是是去掉Model后的名称 例如:
UsereModel.class.php 文件中的 UsereModel 类 ,如果在实例化的时候传入模型名"User"会按传入查找数据表 前缀+“user”,如果不传则会提取 UsereModel类的 “Usere” 去查找数据表。这样可以解决模型名与数据表明不一致的问题。
2.2 D方法实例化
D方法的参数是模型的名称,并且和模型类的大写定义是一致的。
<?php //实例化模型
$user=D("User"); //相当于 $user=new \Home\Model\UserModel();
跨模块实例化
D('Admin/User') 其中 “Admin” 是模块名称,“User”是模型名称
实例化 Extend扩展名空间下的Info模型
D('Extend://Editor/Info')
2.3 M方法实例化
M('User') 与D方法实例化的区别是这个方法不需要该模型存在,并且如果模型存在则其中的方法也会别忽略,该方法主要是用来对数据库的操作。
当D方法没有找到模型时会默认的调用 M方法。
2.4 实例化空模型
$Model=new Model() 或者 $Model=M();
这种空实例可以用老进行原生的sql查询(注:其他的模型也可以进行原生的sql查询,并且查询的表不必跟模型对应)
3. 模型中的字段
$fields=array('','') 表示数据表中的字段
$pk 表示数据表的主键
$connection=array('db_type' => 'mysql','db_user' => 'root','db_pwd' => '1234','db_host' => 'localhost','db_port' => '3306','db_name' => 'thinkphp','db_charset' => 'utf8','db_params' => array(), // 非必须); 表示数据库连接
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集
$connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
thinkphp框架之模型(数据库查询)的更多相关文章
- thinkphp框架 的 链接数据库和操作数据
框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...
- ThinkPHP框架之模型
一.数据库配置 在父类配置ThinkPHP/Conf/convention.php中,找到数据库设置部分: 将这部分复制到我们模块的配置文件Home/Conf/config.php中,将需要的参数写上 ...
- CodeIgniter (CI)框架中的数据库查询汇总
引言: 前两天业务涉及到一个拉取答题排行榜的需求,数据库里数据是这样的: 同一个人可能提交过多次成绩,所以同一个人可能会有多次记录: 同一个人提交的多次成绩中可能有至少两次成绩是一样的. 于是,查询的 ...
- 涨知识,涨知识 :ThinkPHP框架下Where条件查询Mysql数据库某字段是否为空
代码虐我千百遍,我对代码如初恋~ 问题: 查询某字段app_date数据是否为NULL,正常我们实现的办法是: $map['app_data'] = array('eq','null'); $data ...
- 关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...
- ThinkPHP框架 基础 链接数据库
在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php ...
- tp框架简易导出数据库
类库,将以下文件放入vendor文件夹中,命名空间vendor,使用think下的model类 <?php /** * 描述:基于ThinkPHP框架的Mysql数据库导出类 * 日期:2012 ...
- ThinkPhp框架的数据库操作(查询)
TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. ...
- ThinkPhp框架对“数据库”的基本操作
框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是 ...
随机推荐
- FFT(快速傅里叶变换):HDU 5307 He is Flying
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8IAAAPeCAIAAABInTQaAAAgAElEQVR4nOy9fZReVXk3vP8ia+HqCy
- 【动态规划】Vijos P1616 迎接仪式
题目链接: https://vijos.org/p/1616 题目大意: 长度为N的字符串,只含‘j’和‘z’,可以将任意两个字符调换K次,求能够拥有的最多的'jz'串. 题目思路: [动态规划] 首 ...
- RAM——[HAOI2007]理想的正方形
题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...
- H - Parity game-poj1733(需要离散化)
题意:给一个序列这个序列都是由0和1组成,现在随意拿出来一个序列,然后说出他的和是奇数还是偶数,因为有可能存在假话,让你判断前多少条没有假话,也就是查找第一个假话的位置-1 ///////////// ...
- 高性能Java Web 页面静态化技术(原创)
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...
- 根据类名查所属jar包
在开发时经常会参考一些现有的例子,但有些例子只有代码,代码中引用的类所属的jar包却没有明确说明,如何找到一个类所属的jar包,可以通过访问以下网址解决:http://www.findjar.com
- Linux shell入门基础(八)
八.shell脚本sed&awk 01.sed的使用 流编辑器-Steam Editor #ed /etc/passwd 1,10p …… 1s/root/byf/p(替换root为byf) ...
- POJ 1330 Nearest Common Ancestors(LCA模板)
给定一棵树求任意两个节点的公共祖先 tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断.如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果 ...
- codevs 最佳落点(模拟)
/* 这题并没有A掉 自己电脑上运行ok提交就不对 预处理攻击范围 然后模拟 求大神看看有没有错误 Orz */ #include<iostream> #include<cstdio ...
- ExecuteReader执行查询实例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...