TinkPHP框架学习-03模型类
1-----数据访问
2-----数据查询
3-----数据添加
4-----数据修改
5-----数据删除
创建一张nation表并写入三条测试数据
create table nation(
`code` int(15) not null auto_increment,
`name` varchar(50) not null,
primary key (`code`)
);
insert into `nation` values
(1,'人族'),
(2,'神族'),
(3,'魔族'),
(4,'人族');
一 数据访问(MVC中的M)
--模型应当建在Model文件下
--例如对nation表进行操作
--在Model文件夹下创建NationModel.class.php 创建那个表则用哪个表命名模型,创建类NationModel与文件名一致继承自Model
--修改数据库链接配置,从tp/ThinkPHP/Conf/convention.php把数据库设置复制至tp/Application/Home/Conf/config.php
修改书库设置,在各自的模块中修改 'DB_FIELDS_CACHE' => false // 启用字段缓存在开发时改为false
①--第一种:new方式
<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller {
public function test(){
$conn = new \Home\Model\NationModel();
var_dump($conn);//输出并查看
}
//子类对象NationModel
}
②--第二种:D()方法
<?php
namespace Home\Controller;
use Think\Controller;
public function test(){
$conn = D("nation");//直接在方法内写表名
var_dump($conn);
}
//子类对象NationModel
}
③--第三种方式:M()方法
<?php
namespace Home\Controller;
use Think\Controller;
public function test(){
$conn = M("nation");//直接在方法内写表名
var_dump($conn);
}
//父类对象Model
}
三种方法的区别
--第一种new方法必须写Model文件
--第二种方法,如果Model存在则创建子类对象,如果不存在则创建父类对象
--第三种方法创建父类对象
--推荐使用第二三种方式
博客出自"万年",地址:博客出自"万年",地址:http://www.cnblogs.com/wannian/p/8999946.html
二 数据的查询( 写在test()方法内 )
--TP框架自带的方法( 以访问nation表为例.$conn为表的对象 );
|--返回数据的
--$conn->select(); 查询,并返回一个二维数组,
--如果没有值,则查询所有,如果写入主键的值则返回相应的查询结果,多个值时用逗号隔开
--$conn->find( '主键值' ) 查询一条数组,返回一个数组
--$conn->count(); 查询并返回数据条数,
--$conn->max( '字段名' ); 查询并返回字段中最大的数据值
--$conn->min( '字段名' ); 查询并返回字段中最小的数据值
--$conn->avg( '字段名' ); 返回该字段数据的平均值,小数点后四位数
--$conn->sum( '字段名' ); 返回该字段数据的和
|--其他:连贯操作
--field(" "); 要被查询的列,值为字段名,或count()方法等 例如: $conn->field(' code ')->select(); 查询code列的数据
--where(" "),根据条件查询,语法与sql语句一样, 例如: $conn->where(" code='1' or code='2' ")->select();根据条件查询
--table(" ");临时切换表,只在此行切换 例如: $conn->table(' user ')->select(); 切换到`user`表并查询
--alias(" "); 为表设置别名 例如: $conn->alias(" t1 ")->select();
--order(" "); 排序 例如: $conn->order('code desc')->select(); 根据code列降序排序
--limit(" ");限制查询条数 例如: $conn->limit("1,2")->select(); 跳过1条数据,取2条数据;
--page(" 页,条 ");分页查询 例如: $conn->page("2,2")->select(); 取第2页的数据,每页显示2条
--group(" "); 分组查询 例如:$conn->group("name")->field("name,count(*)")->select(); 根据name字段分组查询name以及统计数量
--having(" ");配合分组查询筛选条件 例如: $conn->group("name")->having("count(name)>1")->select(); 根据name分组,并查询条数大于1条的数据
--distinct(" "); 去重 例如: $conn->field("name")->distinct("name")->select(); 查询name列,并对其去重
--lock(true); 添加锁 例如:$conn->lock(true)->select(); 在执行这条语句的时候,其他人无法操作,(在访问数据非常集中大量时时可避免错误操作)
--join();连表查询 进行连表查询时建议使用sql语句,个人认为比该方法好;
|--sql语句查询
$conn->query(" "); 在query方法中写sql语句,连表查询时建议使用
三 数据的添加
①利用数组与add()方法
public function other(){
$conn = D('nation);
$arr = array('code'=>'5', 'name'=>'精灵族'); //定义一个关联数组,索引对应字段名,值对应数据的值
$conn->add($arr); //add();方法添加值;
}
②利用$conn对象与add()方法(因为$conn是一个对象,且有code与name两个属性,为其赋值)
public function other(){
$conn = D('nation);
$conn->code='6';
$conn->name='兽人族';
$conn->add();
}
③自动收集表单
--前台代码
--提交到自身方法的路径
--name的值是数据库表的字段名
<form action="__SELF__" method="post">
<div><input type="text" name="code"></div>
<div><input type="text" name="name"></div>
<div><input type="submit" value="登录"></div>
</form>
--模型的代码
--判断是否提交
--create()方法自动收集表单数据
--add()添加
public function other(){
$conn = D("nation");
if(empty($_POST)){
$this->show();
}else{
//执行添加操作
$conn->create();//自动收集表单
$conn->add();
}
}
四 数据的修改
①利用数组与save()方法
public function other(){
$conn = D('nation);
$arr = array('code'=>'7', 'name'=>'妖精族');
$conn->save($arr); //save()修改;
}
②利用$conn对象与add()方法
public function other(){
$conn = D('nation);
$conn->code='6';
$conn->name='天翼族';
$conn->save();
}
③ 自动收集表单
--前台代码
--提交到自身方法的路径
--name的值是数据库表的字段名
<form action="__SELF__" method="post">
<div><input type="text" name="code"></div>
<div><input type="text" name="name"></div>
<div><input type="submit" value="登录"></div>
</form>
--模型的代码
public function other(){
$conn = D("nation");
if(empty($_POST)){
$this->show();
}else{
//执行添加操作
$conn->create();//自动收集表单
$conn->save();
}
}
五 数据删除
|--delete()方法 值为主键对应的值;
|--execute()方法, 值为sql语句,进行增删改
TinkPHP框架学习-03模型类的更多相关文章
- Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库
一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...
- TinkPHP框架学习-01基本知识
1-----目录结构 2-----访问地址 3-----MVC开发 一 目录结构 |--Application 程序文件夹 |--Common 公共方法函数 |--Home 模块 |也可以自 ...
- TinkPHP框架学习-04命名空间
1-----命名空间 2-----调用其他控制器的方法 3-----U()函数 一命名空间 ①看做是虚拟目录 --ThinkPHP/Library 初始命名空间 --在Library文件夹下的所有文件 ...
- TinkPHP框架学习-02控制器基本操作
1-----创建控制器 2-----访问视图页面 3-----注册变量到视图页面 4-----获取表单数据 一 在Home模块下创建控制器 举例: 目录tp/Application/H ...
- Spring框架学习03——Spring Bean 的详解
1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...
- Yii 框架学习--03 多应用多模块
本文以YII 2.0.7为例. 概述 首先看看多应用和多模块的特点: 多应用的特点: 独立配置文件 独立域名 多模块的特点: 统一配置文件 统一域名 那么,实际该怎么决定使用多应用还是多模块呢? 对于 ...
- laraver框架学习------工厂模型填充测试数据
在laravel中填充数据有几种方式.一种是Seeder,另一种是工厂模式进行的填充. 工厂模式可以实现大批量的填充数据,数据的量可以自定义.这也为后续的软件测试提供方便. 在laravel框架有da ...
- 深度学习Keras框架笔记之AutoEncoder类
深度学习Keras框架笔记之AutoEncoder类使用笔记 keras.layers.core.AutoEncoder(encoder, decoder,output_reconstruction= ...
- 深度学习Keras框架笔记之TimeDistributedDense类
深度学习Keras框架笔记之TimeDistributedDense类使用方法笔记 例: keras.layers.core.TimeDistributedDense(output_dim,init= ...
随机推荐
- svn的分支与合并
作者:fbysss msn:jameslastchina@hotmail.com blog:blog.csdn.net/fbysss 声明:本文由fbysss原创,转载请注明出处 关键字:svn分支 ...
- cout设置输出数据不显示科学计数法
[解决方案] 1.在头文件包含—#include<iomanip>——定义IO流输出输入格式控制相关函数. 2.利用cout输出格式为—cout << fixed <&l ...
- JavaWeb之搭建自己的MVC框架
https://blog.csdn.net/anita9999/article/details/83378111 自己写一个mvc框架吧(一) https://www.cnblogs.com/heba ...
- 使用Python matplotlib做动态曲线
今天看到“Python实时监控CPU使用率”的教程: https://www.w3cschool.cn/python3/python3-ja3d2z2g.html 自己也学习如何使用Python ma ...
- (C#)生成指定长度的随机字符串的通用方法
.NET(C#)生成指定长度的随机字符串的通用方法,此方法可以指定字符串的长度,是否包含数字,是否包含符号,是否包含小写字母,是否包含大写字母等, 源码: #region 生成指定长度的随机字符串 / ...
- abaqus 帮助文档 Substructure(子结构) 理论
对于静态问题,可以缩减到只保留Retain Node的刚度矩阵和载荷矩阵: 但对于动力问题,还需要增加内部节点作为retain node,但这样会有点麻烦,更为常用的方式是保留子结构的模态和振型.
- python-pcl
python-pcl安装和使用 https://blog.csdn.net/joker_hapy/article/details/85006818 Ubuntu16.04下安装PCL及python-p ...
- Android手机不插USB,使用adb网络远程调试
最近做项目,需要在手机不插USB的情况下连接设备查看打印的日志,发现可以通过adb connect命令实现: 1.先把手机通过USB与电脑相连 2.使用adb tcpip 5555命令,打开手机的55 ...
- 黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付
一.首先先确定H5支付权限已经申请! 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB ...
- 使用Visual Studio Code开发(编译、调试)C++程序
总体安装步骤 安装VSC(Visual Studio Code). 安装C/C++编译器(如MinGW-w64),然后配置好环境变量.//完成这步即可在VSC的终端(命令行)下编译.运行.cpp程序了 ...