zoukankan      html  css  js  c++  java
  • thinkphp5.0 数据库访问

    新建一个模型类
    applicationapimodelBanner.php

    class Banner
    {
        public static function getBannerByID($id)
        {
          //
        }
    }
    

    原生方法

    tp5提供了db类来进行数据库的操作

    applicationapimodelBanner.php

    use thinkDb;
    
    class Banner
    {
        public static function getBannerByID($id)
        {
            $result = Db::query('select * from banner_item where banner_id=?', [$id]);
            return $result;
        }
    }
    

    调用
    applicationapicontrollerv1Banner.php

    class Banner
    {
        public function getBanner($id)
        {
            (new IDMustBePositiveInt())->goCheck();
            $banner = BannerModel::getBannerById($id);
            if (!$banner) {
                 throw new BannerMissException();
            }
            return json($banner);
        }
    }
    

    查看返回结果

    查询构造器

    tp5提供了query查询器,对原生的sql做了封装,通过builder编译生成原生sql,使用上更便利
    不需要关心具体的实现,可对多种不同的数据库统一操作

    applicationapimodelBanner.php

    class Banner
    {
        public static function getBannerByID($id)
        {
          // where的使用
          // where('字段名','表达式', '查询条件')
          // $result = Db::table('banner_item')->where('banner_id', '=', $id)->find();//返回一条结果
          $result = Db::table('banner_item')->where('banner_id', '=', $id)->select();//返回多条结果
          return $result;
        }
    }
    

    使用闭包法

    class Banner
    {
        public static function getBannerByID($id)
        {
          $result = Db::table('banner_item')
          ->where(function ($query) use ($id) {
            $query->where('banner_id', '=', $id);
          })
          ->select();
          return $result;
        }
    }
    
    

    开启sql日志记录

    class Banner
    {
        public static function getBannerByID($id)
        {
          $result = Db::table('banner_item')
          //加了fetchSql() 不会真实执行查询,只会返回一个最终生成sql代码(没有调用时间等详情信息)
          ->fetchSql()
          ->where(function ($query) use ($id) {
            $query->where('banner_id', '=', $id);
          })
          ->select();
          return $result;
        }
    }
    

    查看返回结果

    如已关闭了tp5默认记录日志,则需手动记录
    publicindex.php

    require __DIR__ . '/../thinkphp/start.php';
    // 放置在加载框架引导文件之后
    	hinkLog::init([
        'type'  =>  'File',
        'path'  =>  LOG_PATH,
        'level' => ['sql']
    ]);
    

    查看效果
    调用一次接口(执行一次查询)后

    ORM与模型

    Object Relation Mapping 对象关系映射
    以操作一个对象的方式来获取数据

    模型是根据功能划分的,不单单是一个类一个表,其返回的结果可能是很多表共同生成的

    继承tp5自带的model类
    applicationapimodelBanner.php

    namespace appapimodel;
    
    use thinkModel;
    
    class Banner extends Model 
    {
    
    }
    

    使用
    applicationapicontrollerv1Banner.php

    <?php
    
    namespace appapicontrollerv1;
    
    use appapivalidateIDMustBePositiveInt;
    use appapimodelBanner as BannerModel;
    use applibexceptionBannerMissException;
    
    class Banner
    {
        public function getBanner($id)
        {
            (new IDMustBePositiveInt())->goCheck();
            $banner = BannerModel::get($id);
            if (!$banner) {
                throw new BannerMissException();
            }
            // 观察继承了BannerModel的返回结果,返回了个模型对象,而不是像Db一样的数组
            // 可直接返回不再序列化处理,tp5会自动将模型对象序列化
            return $banner;
        }
    }
    

    再在config.php配置中更改默认输出类型可返回正常结果
    applicationconfig.php

    return [
      //...
      'default_return_type' => 'json',
      //...
    ]
    

    查看结果

    tp5默认表名和类名一致,如不是需要额外处理,例如下面的Banner模型关联的表就是cateory表

    class Banner extends Model 
    {
      protected $table = 'cateory'
      //...
    }
    
  • 相关阅读:
    win8装oracle 10g 弹出:环境变量path的值超过1023字符,无法设置改值
    Modern UI for WPF 开源项目(3):用模板创建我的第一个Modern UI app
    安装oracle11G,10G时都会出现:注册ocx时出现OLE初始化错误或ocx装载错误对话框
    win8快捷键
    Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
    Delphi FireDAC 连接SQL Server一些要注意的地方
    Delphi XE5 for Android (四)
    Delphi D10.X VCL和FireMonkey之间的常见差异介绍
    delphi给App授予权限
    github无法登陆的解决办法
  • 原文地址:https://www.cnblogs.com/Qyhg/p/14751209.html
Copyright © 2011-2022 走看看