• ThinkPHP框架基础3


    连接数据库

    把convertion.php数据库相关的设置复制到config.php

    在config.php做数据库连接配置,设置好数据

    1. 制作model模型

    a)        model本身就是一个类文件

    b)        数据库中的每个数据表都对应一个model模型文件

    c)         最简单的数据model模型类

    1. $goods =  new  命名空间GoodsModel(); 
    2. $goods = D(‘模型标志’);   

    a)        $goods = D(“Goods”);

    b)        该$goods是父类Model的对象,但是操作的数据表还是sw_goods

    c)         $obj = D();  实例化Model对象,没有具体操作数据表,与M()方法效果一致

    1. $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

    MainController.class.php:

    function ShowAll()
        {
            //Model:数据库中每张表对应一个模型
            //表名对应类名,类里面的成员变量是列名
            //把一张表对应为另一个类,其中一条数据对应一个对象
            
            //如果我们对该表的模型没有特殊操作的话,可以不用建立该模型
    //第一种方法:实例化Model类
    $info = new HomeModelInfoModel(); var_dump($info);
    //第二种方法: $info = D("info"); var_dump($info);
    //第三种方法: $car = M("Car"); var_dump($car);

    【数据查询】

    select()是数据模型的一个指定方法,可以获得数据表的数据信息

             返回一个二维数组信息,当前数据表的全部数据信息

    $obj = D();  创建对象

    $obj -> select();  查询数据

    select  字段,字段  from  表名  where 条件  group 字段 having  条件   order 排序  limit 限制条数;

    $obj ->field(字段,字段);  查询指定字段

    $obj ->table(数据表);   设置具体操作数据表

    $obj ->where(参数);   参数就是正常sql语句where后边的条件信息

    例如:( “goods_price >100 and  goods_name like ‘三%’”)

    $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语句。

    //var_dump($car->select());
            //通过where方法
            $attr = $car->where("brand='b002'")->select();//select返回的不是对象是数组,不能再接
            
            $attr = $car->table("Nation")->select();
    
            $attr = $car->field("Code,Name")->select();
    
            $attr = $car->order('Oil desc')->select();//排序
        
            $attr = $car->limit(2,2)->select();//分页查询,如果一个参数,取前N个
            
            $attr = $car->page('3,2')->select();//取第N页的几条数据
            
            $attr = $car->field("brand,count(*)")->group("Brand")->select();//分组查询
            
            $attr = $car->join("Brand on Car.Brand = Brand.Brand_Code")->select();    //连接查询    
            
            $attr = $car->distinct(true)->field('Brand')->select();//去重
            
            $attr = $car->find('c001');//find方法,只能根据主键值查,返回一维数组,取一条数据
            $attr = $car->select('c001,c002');//返回二维数组,取多条数据
    }

    注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作

    D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。

    【数据添加】

    add()该方法返回被添加的新记录的主键id值

    两种方式实现数据添加

    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 -> goods_price = 3000;

    $goods -> add();

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

    【收集表单数据入库操作】

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

    注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容
    注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到

    【数据修改操作】

    save()  实现数据修改,返回受影响的记录条数

    具体有两种方式实现数据修改,与添加类似(数组、AR方式)

    1. 数组方式

    a)         $goods = D(“Goods”);

    b)        $ar = array(‘goods_id’=>100,‘goods_name’=>’lenovo手机’,’goods_price’=>1200);

    c)         $goods ->where(‘goods_id>50’)-> save($ar);

    1. AR方式

    a)         $goods = D(“Goods”);

    b)        $goods -> goods_id = 53;

    c)         $goods -> goods_name = “三星手机”;

    d)        $goods -> goods_price = 2000;

    e)         $goods ->where(‘goods_price>10000’)->save();

    以上两种方式如果可行,即要修改全部数据

    以上sql语句从技术上可行,从业务上不可行(事故)

    tp框架有智能考虑,以上情况的sql语句不被允许执行。

    如何执行:

    ①     明确告诉系统那条sql语句被update更新

    ②     可以设置where进行sql语句更新操作

    save()  方法返回值

    0:之前没有问题,执行前后数据没有变化

    自然数:受影响的记录条数

    false:执行失败

    数据修改具体实现:

    通过路由给一个操作方法传递参数

    http://网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值

    以上路由是通过get形式给指定的操作传递了三个参数信息

    $_POST方式也可以

    原则三个参数信息接收的时候通过$_GET接收即可

    例如:$_GET[‘变量名1’];

    以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收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操作方法内部有两个逻辑:展现表单、收集表单

    【数据删除及执行原生sql语句】

    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 = “select goods_category_id,avg(goods_price) from sw_goods group by goods_category_id having  avg(goods_price)>1000”;

    $goods ->query($sql);

    $sql = “update sw_goods set goods_name = ‘htc_two’ where goods_id=100”;

    $goods ->execute($sql);

  • 相关阅读:
    背包解法
    第十六周周总结
    软件工程个人课程总结
    学期课后个人总结
    spring事务
    梦断代码03
    团队冲刺的第二十四天
    第十五周周总结
    百度输入法评价
    找到水王
  • 原文地址:https://www.cnblogs.com/zhaimiaoer/p/5597016.html
Copyright © 2020-2023  润新知