Thinkphp笔记3 模型

  1. 创建应用项目
    a) 入口文件index.php
    b) 应用常量定义define(“CSS_URL”,XXX);
    c) define(“APP_DEBUG”,true); 调整模式为开发调试模式 加载25文件
    d) 包含核心程序ThinkPHP/ThinkPHP.php
  2. 控制器和视图创建
    a) UserController.class.php(命名空间)
    b) Home/View/User/login.html
    c) Home/View/User_login.html (在配置文件convertion.php里边有定义控制器和模板中间的连接符)
    d) Home/View/User_register.html

  3. 路由解析
    a) index.php?m=XX&c=YY&a=ZZ 基本get模式
    b) index.php/XX/YY/ZZ pathinfo路径模式
    c) 网址/XX/YY/ZZ rewrite重写模式,index.php被省略
    d) index.php?s=/XX/YY/ZZ 兼容模式
    e) echo U(“控制器/操作方法”); 查看具体url路由解析模式

  4. 配置文件(核心、公共、分组模块)及函数库文件
    a) 核心:ThinkPHP/Conf/convertion.php
    b) 公共:shop/Common/Conf/config.php
    c) 分组模块:shop/Home/Conf/config.php
    d) 上边三个配置文件后边的配置变量会覆盖前边的配置变量
    e) 函数库文件:
    f) 核心:ThinkPHP/Common/functions.php
    g) 公共:shop/Common/Common/function.php
    h) 分组模块:shop/Home/Common/function.php
  5. 模板与tp框架整合
    a) 拷贝模板代码到tp框架view目录
    b) 拷贝css、img、js静态资源到tp指定目录(shop/public)
    c) 在入口文件处把css、img、js路径定义为常量
    d) 在模板中通过常量把静态资源引入{$Think.const.常量名}
    e) 调整css文件里边的图片路径
    f) 常量使用注意:在入口文件是先定义常量,再引入核心文件ThinkPHP.php
  6. 空操作和空控制器处理
    a) 空操作:在控制器中定义方法function _empty( m, arg)
    b) 空控制器:定义控制器EmptyController.class.php _empty()方法
  7. 项目分组
    a) Home Admin分组
  8. 跨控制器调用
    a) A(“[分组模块/]控制器标志”) 实例化控制器
    b) R(“[分组模块/]控制器标志/操作方法”) 实例化控制器同时直接调用指定方法
    c) new UserController(); 直接实例化指定的控制器
  9. 后台“品”字形页面搭建
    a) head left right
    b) index (frameset)
    c) frame 里边 src= 通过独立路由进行请求

数据模型model应用
mysql数据库操作(增、删、改、查)

【连接数据库配置】
convertion.php
config.php
1. 在config.php做数据库连接配置
2.

  1. 制作model模型
    a) model本身就是一个类文件
    b) 数据库中的每个数据表都对应一个model模型文件
    c) 最简单的数据model模型类

  2. 字段缓存设置
    tp框架执行过程中会使用到数据表中的字段信息,通过sql语句可以查询”show colums from table” ,处于性能考虑,可以把字段缓存,避免每次重复执行sql语句。

  3. 可以根据情况对当前的model模型进行个性化设置

  4. 在入口文件定义一个调试输出函数,便于系统开发使用

【实例化model的三种方式】
1. goods=newGoodsModel();2. goods = D(‘模型标志’);
a) goods=D(Goods);b) goods是父类Model的对象,但是操作的数据表还是sw_goods
c) obj=D();ModelM()3. obj = M();
a) 实例化父类Model
b) 可以直接调用父类Model里边的属性,获得数据库相关操作
c) 自定义model就是一个空壳,没有必要实例化自定义model
d) obj=M();Model obj = D(标志);
obj=D(); obj = M(标志);
$obj = M();
D()和M()方法的区别:
前者是tp3.1.3里边对new操作的简化方法;
后者在使用就是实例化Model父类
两者都在函数库文件定义ThinkPHP/Common/functions.php

注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作
D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。
【数据查询】
select()是数据模型的一个指定方法,可以获得数据表的数据信息
返回一个二维数组信息,当前数据表的全部数据信息
1. 配置smarty
a) 配置变量信息
i. convertion.php
ii. Behavior行为配置变量信息(页面底部日志显示配置、smarty配置)
iii. 系统程序里边有一些零散的配置信息
b) 在config.php里边配置smarty使用设置

模板引擎配置参数位置(不能直接修改,在config.php里边重写):

  1. 具体使用(从tp引擎变为smarty引擎)
    a) css样式如果有{},需要使用{literal}标签禁止smarty解析
    b) 关键字 Think smarty
    c) tp引擎会对关键常量进行替换例如:CONTROLLER MODULE
    smarty引擎不给替换,需要设置为:{$smarty.const.CONTROLLER}

【各种查询条件设置】
obj=D(); obj -> select(); 查询数据
select 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条数;
SELECT%DISTINCT%%FIELD%FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%

obj>field(); obj -> table(数据表); 设置具体操作数据表
obj>where();sqlwhere(goodsprice>100andgoodsnamelike obj -> group(字段); 根据字段进行分组查询
obj>having();having obj -> order(‘price desc/asc’) 排序查询
$obj -> limit([偏移量,]条数) 限制查询的条数

sql语句里边具体的条件设置在tp框架model模型里边体现为具体的方法操作

以上方法理论上是父类Model的对应方法
父类model具体存在方法: field() where() limit()
还有一些方法在__call()自动调用函数里边: table() group() order() having()
在__call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行

以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)
$obj -> limit(5)->field(‘id,name’)->order(‘price asc’) -> table(‘sw_goods’)->select();
以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性options里边,最后根据options拼装sql语句。

select()方法原理追踪

总结:
1. config.php做数据库连接配置convertion.php
2. 制作model模型文件
3. 实例化model模型对象
a) new 命名空间\类名
b) D([模型标志]);
c) M([模型标志]);
4. 数据查询select()
5. 各种查询条件设置方法
6. smarty模板引擎切换(Behavior行为里边的配置变量)

【查询数据信息】
info= goods -> where()->field(字段)->select();
select()方法
1. 返回一个二维数组信息
2. 返回全部数据表信息
3. 给该方法传递参数
a) select(30) 查询主键值等于30的记录信息
b) select(“10,12,14”) 查询主键值在10、12、14范围的记录信息
4. find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组
为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法

  1. having()方法设置查询条件,where()设置查询条件
    having 和 where区别
    ① 使用有先后顺序
    ② where price>100 having price>100
    ③ where 设置条件,字段必须是数据表中存在的字段
    ④ having 设置条件,字段必须是select语句查询出来的字段可以使用

  2. 相关聚合函数 count() sum() avg() max() min()
    以上聚合函数是最后被调用的方法
    以上方法可以结合具体条件方法使用
    例如:$goods -> where(‘goods_price >1000’)->count(); 大于1000元的商品的总数目

【实现数据添加add】
select()
add() 该方法返回被添加的新记录的主键id值
save()
delete()
两种方式实现数据添加
1. 数组方式数据添加
goods=D(Goods); arr = array(‘goods_name’=>’iphone5s’,’goods_weight’=>’109’);
//注意:goods_name和goods_weight是数据表中字段名称
goods>add( arr);

  1. AR方式实现数据添加
    a) ActiveRecord 活跃记录
    b) AR规定了程序与数据库之间的关系
    c) 什么是AR:
    d) ① 一个数据表对应一个类model
    e) ② 一条数据记录对应类的一个对象
    f) ③ 每个字段对应该对象的具体属性
    g) tp框架的AR是假的
    goods=D(Goods); goods -> goods_name = “htc_one”;
    goods>goodsprice=3000; goods -> add();

    以上两种方式:数组、AR,最后add都要把新记录的主键id值返回

【收集表单数据入库操作】
1. 制作一个表单
2. 通过$_POST收集信息
3. 通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤

  1. 在create()收集表单方法内部会自动过滤非法的字段信息

【数据修改操作】
select()
add()
save() 实现数据修改,返回受影响的记录条数
delete()
具体有两种方式实现数据修改,与添加类似(数组、AR方式)
1. 数组方式
a) goods=D(Goods);b) ar = array(‘goods_id’=>100,‘goods_name’=>’lenovo手机’,’goods_price’=>1200);
c) goods>where(goodsid>50)>save( ar);
2. AR方式
a) goods=D(Goods);b) goods -> goods_id = 53;
c) goods>goodsname=;d) goods -> goods_price = 2000;
e) $goods -> where(‘goods_price>10000’)->save();
以上两种方式如果可行,即要修改全部数据
以上sql语句从技术上可行,从业务上不可行(事故)
tp框架有智能考虑,以上情况的sql语句不被允许执行。
如何执行:
① 明确告诉系统那条sql语句被update更新
② 可以设置where进行sql语句更新操作

save() 返回方法值
0:之前没有问题,执行前后数据没有变化
自然数:受影响的记录条数
false:执行失败

【数据删除及执行原生sql语句】
select()
add()
save()
delete() 返回受影响的记录条数

goods>delete(30);30 goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录
$goods -> where(“goods_id>60”)->delete() 把符合条件的记录都给删除

执行原生sql语句
1. 查询语句query() 返回一个二维数组信息
2. 添加、修改、删除 execute() 返回受影响的记录条数
goods=D(Goods); sql = “select * from sw_goods”;
rst= goods -> query($sql);

sql=selectgoodscategoryid,avg(goodsprice)fromswgoodsgroupbygoodscategoryidhavingavg(goodsprice)>1000; goods -> query($sql);

sql=updateswgoodssetgoodsname=htctwowheregoodsid=100; goods -> execute($sql);

【数据修改具体实现】
通过路由给一个操作方法传递参数
http://网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值
以上路由是通过get形式给指定的操作传递了三个参数信息
原则三个参数信息接收的时候通过 GET _GET[‘变量名1’]; include()

以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get参数信息
http://网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijing
function upd( name, age,addr){name;
age; addr;
}
以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。
(除非参数有默认值)

修改商品信息步骤:
1. 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作
2. 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id
3. 在修改表单里边制作隐藏域goods_id,避免tp框架禁止修改语句执行
4. 在upd操作方法内部有两个逻辑:展现表单、收集表单

【表单验证】
javascript
jquery
在服务器端通过tp框架实现表单验证
用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历
具体步骤:
1. 制作表单
2. 表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据)
3. 自定义数据model模型类实现具体验证规则

验证规则的第4个参数说明(0 1 2):

注意:
1. 模型实例化通过new
2. 调用create()方法才可以触发验证执行
总结:
1. 数据添加add() 两种方式:数组、AR
2. 数据修改
a) 注意:需要设置条件(主键id、where)
3. 删除删除 delete()
4. 执行原生sql语句:query() execute()
5. 给操作方法传递参数 /Admin/User/login/id/100/name/tom
a) function login( id, name)
6. 表单验证

作业:
1. 在商城后台实现数据的列表查询、删除、添加、修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值