zoukankan      html  css  js  c++  java
  • ThinkPHP5小结

    1,框架目录介绍

    Application:用于存放网站的文件夹

    Public:存放网站的静态资源文件夹和各公共文件

    Thinkphp:框架的核心代码文件

    Vendor:框架依赖的功能包存放文件夹

    2,命令的方式创建控制器

    根目录:Php think make:controller 分组/控制器名称

    3,命令方式创建分组

    根目录:php think build

    4,注册路由

    Route::rule(名称,路由,方式GET/POST)

    Route::get(名称,路由)

    Route::post(名称,路由)

    Route::any(名称,路由,[‘method’=>’get|post’])

    5,视图的调用

    $this->fetch()

    1,数据库的配置

    (配置文件的地址:application/database.php)

    2,命令的方式创建模型:

    根目录:Php think make:model 分组/模型名称

    3,数据的基本操作

    1)添加:

    添加一条记录:save

    添加多条记录:saveAll

    只添加数据库中含有的字段:allowFiled(true)

    如:$goods->allowField(true)->save($data)

    $goods->saveall($data)

    2)查询:

    A)查询一条记录:get()/find()

    如:

    Goods::get(133)

    $goods->where(条件)

    ->find()

    B)查询多条记录:all()/select()

    如:

    Goods::all([133,224])

    $goods -> where('goods_id','in',[133,224])

    ->select()

    C) 查询字段:value()/column()

    如:

    查询一个字段:

    Goods::where('goods_id',133)

    ->value('goods_name')

    查询满足条件的全部数据的指定字段:

    Goods::where('goods_id','>',100)

    ->column('goods_name','goods_number')

    3)修改:

    update(至少满足下面条件中的一个)

    ①设置一个where()方法

    ②给修改的数据里边有设置主键id值

    如:

    $goods -> where('goods_name',’like’, ‘xiao%’)

    -> update(['goods_name' => 'thinkphp']);

    4)除:

    a) 物理删除:delete()/destroy(主键id)

    b) 逻辑删除:softDelete:只是更新了delete_time的值

    1. Trait:trait其实是解决php面向对象不能多继承问题的,是一个弥补

    4,连贯操作

    1)where的四种使用方式:

    ① 数组  

      where(['name'=>'think','status'=>'1'])

       where  name=think and status=1

    ② 表达式

      where('id','>',1)

      where('mail','like','%think@163.com')

    where(['id'=>['>',1],'mail'=>['like','%think@163.com']])

       where  id>1 and mail like ‘%think@163.com’

    ③ 字符串

      where('type=1 AND status=1')

    ④ 绑定参数

      where('id>:id AND name LIKE :name ',

      ['id'=>0, 'name'=>'thinkphp%'])

    whereOr()或条件查询

    where('字段名','表达式','查询条件');

    whereOr('字段名','表达式','查询条件');

    例子:

    $goods = new Goods();

    $info = $goods -> where(‘goods_id’,’>’,100)

    -> whereOr(‘goods_id’,’<’,50)

    -> select();

    2) field()限制被查询的字段

    field('id,title,content')   普通字段

    field(['id','title','content']) 数组方式

    field('id,SUM(score)') 使用函数

    例子:

    Goods::field(‘goods_id,goods_name’)->select()

    3) limit()限制条数

    limit(3)

    limit('3,10') //通过偏移量进行条数限制,第4到14条

    limit(3,10)

    Goods::field(‘goods_id’)->limit(3,5)->select()

    4) order()排序

    order('id desc')

    order('id asc')

    order('id desc,status')

    Goods::order(‘id desc,status’)->select()

    5) group()分组查询

    Goods::field('goods_id,max(price)')

         -> group('goods_brand')

         -> select();

    6) having()查询

    Goods::field('goods_id,count(goods_id) cnt')

        ->group('goods_brand')

        ->having('cnt>200')

        ->select();

    7) fetchSql(true/false) 直接获取sql语句不执行操作

    true:获取sql语句

    false:执行sql语句

    curd(增、删、改、查)操作语句都可以获取对应的sql语句

    Goods::field('mg_name,mg_pwd')->fetchSql(true)->select()

    $m->fetchSql(true)->update(['mg_id'=>508,'mg_name'=>'think']);

    Manager::fetchSql(true)->destroy(509);

    $manager->fetchSql(true)->saveAll($data);

    $manager->fetchSql(true)->save($data);

    8) alias()给数据表起别名,有两种方式使用

    ① alias('m') 给当前数据表起别名

    ② alias(['sp_role  __ROLE__'=>'r','__MANAGER__'=>'m']);

    表名要设置为大写的,并且前后有两个”_下划线”

    __ROLE__会关联sp_role表,假定sp_是表前缀

    __MANAGER__会关联sp_manager表

    又比如__USER_TYPE__会关联sp_user_type表

    Manager::alias('m')

    ->join('__ROLE__ r','m.role_id=r.role_id')

    ->field('m.mg_name,r.role_name')

    ->select();

    Manager::alias(['__ROLE__'=>'r','__MANAGER__'=>'m'])

    ->join('__ROLE__','m.role_id=r.role_id')

    ->field('m.mg_name,r.role_name')

    ->select();

    9) join() 连表查询

    join(表名 别名,连表条件,类型)

    类型:INNER,LEFT,RIGHT,FULL(mysql不支持)

    select g.*,b.brand_name

    from sp_goods as g

    join sp_brand as b

    on g.brand_id=b.brand_id

    1,模板的使用

    1)给模板传递数据:

    1)方式

    $this -> assign(变量在模版中的使用名称,被传递的数据);(和smartymuban的应用相似)

    2)方式

    return $this -> fetch(‘模版名称’,数组信息);

    return $this -> fetch(‘模版名称’,[‘info’=>$info,’name’=>’jim’]);

    如果模版名称为空,需要有“占位符”,具体如下

    return $this -> fetch(‘’,[‘info’=>$info,’name’=>’jim’]);

    3)方式

    $info = xxx;

    $name = yyy;

    return $this -> fetch(‘’,compact(‘info’,’name’));

    compact使用()

    建立一个数组,包括变量名和它们的值

    $city = “北京”;

    $people = “2000万”;

    $weather = “sunshine”;

    $arr = compact(‘city’,’people’,’weather’);

    print_r($arr);

    //[‘city’=>’北京’,’people’=>’2000万’,’weather’=>’sunshine’]

    2)数据的输出

    1)普通变量:{$name}

    2)数组:{$arr.name} {$arr[‘name’]}

    3)对象:{$obj.name}  {$obj:name}  {$obj->name}

    2,遍历数据

    ① {foreach $info as $val}

    ② {volist name="info" id="val"}

    volist标签里边还可以支持的属性:

    offset :偏移量,从第n条开始显示(条数基数从0开始),需要通过””双引号定义信息

    length: 一共显示多少条

    key:显示数据序号

    empty:数据为空时的提示信息

    mod:取模,当前记录的序号对mod取模后的信息,需要通过””双引号定义信息

    3,收集数据

    request()->param():收集所有类型的数据

    request()->post():收集post方式提交的信息

    Svae():添加数据

    allowField(true):去除数据库不存在的数据

    4,ajax无刷新方式

    evt.preventDefault():阻止当前对象的默认动作

    $(this).serialize():序列化当前表单的对象

    parent.window.location.href=parent.window.location.href:刷新父界面

    layer_close():关闭layer弹窗

    5,制作超链接

    {:url('分组/控制器/操作方法',[参数=>值,参数=>值])}

    6,Request对象的使用

    1,创建对象

    request()

    Request::instance()

    function 方法(Request $request)

    $this->request

    2,收集数据

    request()->get()

    request()->post()

    request()->param()

    3,判断请求类型

    request()->isAjax()

    request()->isGet()

    request()->isPost()

    4,获得系统升级

    request()->session

    request()->action()

    request()->controller()

    request()->module() 

    1,依赖注入

    class Goods extends Model

    {

    //在模型中声明invoke方法及对应内容

        public static function invoke(Request $request)

        {

          $id = $request->param('goods_id');

          return self::get($id);

        }

    }

    控制器方法中,设置上述模型的对象,就会自动绑定上数据模型

    public function upd(Goods $goods)

    2,命名空间

    命名空间的作用范围:

    ① 一个文件中只有一个namespace,这个空间的作用范围就是从namespace开始到文件的结束

    ② 一个文件中有多个namespace,每个空间的作用范围是从自己的namespace开始下遇到下个namespace到来之前

    ③ 文件彼此包含include,被包含文件的命名空间 对 包含文件不造成任何 命名空间作用范围的影响

    空间元素的三种访问方式

    ① 完全限定名称

    ② 限定名称

    ③ 非限定名称

    空间引入

    use 空间\空间\空间\空间;

    use  空间\空间\空间\类名;

    use  空间\空间\空间\元素  as  别名;

    访问公共空间的元素统一设置为:  \元素

    建议:访问公共空间元素都要通过”\元素”的方式进行,好处代码可读性高

    注意:

    文件的第1个namespace关键字前边不能有任何非注释代码

    ü 通过“非限定名称”方式访问一个函数或常量元素首先会在本身空间获得,如果没有再去公共空间获取

    ü 通过“非限定名称”访问访问一个类元素  则本身空间必须存在该类,否则报错

  • 相关阅读:
    Mysql问题1862
    S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
    .NET练习计算平方根
    求一个整数以内的素数(函数实现)
    判断一个数是不是素数(函数实现)
    #号在进制输出值的作用,美化输出
    分类——决策树模型(附有决策树生成步骤)
    分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)
    分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
    编写一个程序,求2~n间的素数,n由键盘输入,循环变量分别 从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
  • 原文地址:https://www.cnblogs.com/lovecatcher/p/9067739.html
Copyright © 2011-2022 走看看