实例化model方法和数据库操作以及表单验证
1、$index = new 命名空间\IndexModel();
2、$index = D("模型标志");
a、$index = D("Blog");
b、该$index是父类Model的对象 ,但操作的数据表还是跟new 一样
c、$index = D(); // 实例化Model对象,没有具体操作数据表,与M()方法效果一样
3、$index = M();
a、实例化父类 对象
b、可以直接调用父类Model的属性,获得数据库操作
c、自定义model是一个空,没有必要实例化自定义model
d、$index = M("数据表标志");//实例化Model对象,实际操作具体的数据表
D() 和M()方法的区别
前者是tp3.1.3里边对new操作的简化方法;
后者在使用就是实例化Model父类
两者都在函数库文件定义ThinkPHP/Common/functions.php
注:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作;
D()和M()方法都可以实例化一个没有具体model模型类文件的数据表。
数据查询
select()是数据模型的一个指定方法,可以 获得数据表的数据 信息
返回一个二维数组信息,当前数据表的全部数据信息
1、配置smarty
a、配置变量信息(不能直接修改,只能在项目文件config.php中修改)
i、convertion.php
ii、Behavior行为配置变量信息(页面底部日志显示配置,smarty配置)
iii、系统程序中有一些零散的配置信息
b、在项目文件config.php中配置smarty使用配置
2、具体使用(从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(限制条件)
$obj->field(字段);查询指定字段
$obj->table(数据表); 通过具体数据表查询
$obj->where(参数); 参数(例:id>0 and name like '张%')
$obj->group(字段); 根据字段进行分组查询
$obj->having(参数条件); having条件设置
$obj->order(‘price desc/asc’); 排序查询 (order by 字段 desc/asc)
$obj->limit(偏移量,条数); 限制查询条数
父类model具体存在的方法:field() where() limit()
其他方法在__call()自动调用函数里:table() group() order() having()
在__call()魔术方法里判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行
执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性option里边,最后根据option拼装sql语句。
GoodsModel.class.php继承自 Model.class.php(function __construct() $this->db被实例化) $this->db对象属于mysql类 ($this->db->select())继承自ThinkPHP/Library/Think/Db/Driver/Mysql.class.php(Mysql extends Db)继承自ThinkPHP/Library/Think/Db.class.php(class Db function select())
查询数据信息
$info = $goods->where()->field()->select();
select()方法
1、返回一个二维数组信息
2、返回全部数据表信息
3、给该方法传递参数
a、select(30);//查询主键值等于30的记录信息
b、select('10, 12, 13');//查询主键值在10, 12, 13范围的记录信息
4、find()如果我们查询的结果只有一个信息,使用select()会返回一个二维数组,为了使用方便,需要返回一个一维数组,可使用find()方法;($info = $goods->find(30);//返回一个主键值为30的一维数组)
5、having()方法设置查询条件和where()设置查询条件
having() 和 where()的区别
1、使用有先后顺序
2、where 设置条件的字段必须是数据表中存在的字段
3、having 设置条件的字段必须是select语句查询出来 的字段
6、聚合函数的方法和使用
方法:count();//总数量 sum(); avg(); max(); //最大数 min(); 最小数
都是在最后被调用的方法,可以结合具体条件方法使用;如:$goods->where('height>170')->count();//身高大于170的总人数
实现数据添加add
add() ; //返回被添加的新记录的自增id值
1、数组方式添加
$goods = D('Goods');
$arr = array('字段' => '', '字段'=>'');
$goods->add($arr);
2、AR方式添加
a、 ActiveRecord 活跃记录
b、AR规定了程序与数据之间的关系
c、1、一个数据 表对应一个类model 2、一条数据记录对应类的一个对象 3、每个字段对应该对象的具体属性
d、tp框架的AR是假的
实现添加
收集表单数据添加入库操作
1、制作一个表单
2、通过$_post收集信息
3、通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤
项目添加方法里
4、在create()收集表单方法内部会自动过滤非法的字段信息
ThinkPHP/Library/Think/Model.class.php
数据修改操作
(框架内点击事件后,需跳转页面,不能加载弹窗)
save();//实现数据修改,返回受影响的记录条数
具体有两种方式实现修改(数组、AR)
1、数组
a、$goods = D('表名');
b、$ar = array('字段' => '修改值', '字段' => '修改值');
c、$goods->save($ar);
2、AR
a、$goods = D("表名");
b、$goods->字段 = ‘修改值’;
c、$goods->字段 = ‘修改值’;
d、$goods->save();
以上两种方式如果可行,则修改全部数据, 不过从技术上可行,从业务上不可行(事故),tp框架有智能考虑,以上sql不被允许执行
如何正确执行:
1、明确告诉系统哪条sql语句被update
$ar = array('条件', ''字段' => '修改值', '字段' => '修改值');
2、可以设置where进行sql语句操作
$goods->where('条件')->save();
save()方法返回值
0:之前没有问题,执行前后数据没有变化
自然数:受影响的记录条数
false: 执行失败
数据删除操作
delete() 返回受影响的记录条数
$goods->delete(30); //删除主键值为30的记录信息
$goods->delete("10, 11, 12"); //删除主键值等于10, 11, 12的三条记录
$goods->where('字段>30')->delete(); //把符合条件的记录删除
执行原生sql语句
1、查询语句query() 返回一个二维数组信息
2、添加 、修改、删除 execute() 返回受影响的记录条数,返回false,sql语句有错误 ,返回0表示sql语句执行前后数据没有改变
$goods = D("表名");
$sql = "select * from 表名";
$res = $goods->query($sql);
$sql = "select 字段,字段,字段 from 表名 group by 字段 having 条件 ";
$res = $goods->query($sql);
$sql = "update 表名 set 修改字段和值 where 条件":
$res = $goods->execute($sql);
数据修改具体实现
通过路由给一个操作就去传递参数
http://网址/index.php/模块/控制器/方法/变量名1/值/变量名2/值
以上路由是通过get形式给指定的操作传递三个参数信息,三个参数信息接收时通过$_GET接收
以上参数信息接收不安全,需按框架规则使用:
http://网址/index.php/Admin/Goods/save/name/值/age/值
function save($name,$age) {
$name;$age;
} 以上参数 表述,如果在请求时没有按照规则传递参数,则当前方法禁止访问,(除非参数有默认值)
修改数据信息步骤:
1、在‘修改’按钮处把被 修改数据id信息通过GET形式传递给save操作
2、在save方法里制作形式参数$id,接收服务器给传递的get变量id
3、在修改表单里制作隐藏域数据id,避免tp框架禁止修改语句执行
4、在save操作方法内部有两个逻辑:展现表单、收集表单
表单验证
在服务器端通过tp框架实现表单验证
具体步骤:
1、制作表单
2、表单form数据通过 create()方法收集(验证功能要求必须通过create()方法收集数据)
3、自定义数据model模型类实现具体验证规则
验证规则 array(验证字段,验证规则, 错误提示,【验证条件,附加规则,验证时间】);
验证字段:表单字段名
验证规则:包括:require(字段必须), email(邮箱),url(URL地址),currency(货币),number(数字)
错误信息:验证失败后的提示
验证条件:为0时,($_POST存在字段就验证(默认)), 为1时,(不管$_POST存不存在字段必须 验证),为2时,(值不为空时时验证,为空时该字段不验证)
附加规则:配合验证规则使用
验证时间:为1时,新增数据时验证,为2时编辑数据 时验证,为3时,全部情况下验证(默认)
处理验证错误设置:ThinkPHP/Library/Think/Model.class.php
实现表单项目验证,通过重写父类_validate属性实现:
注意:模型实例化通过new,调用create()方法才可以触发验证执行