实例化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()方法才可以触发验证执行

猜你喜欢

转载自blog.csdn.net/qq_42176520/article/details/80472571