• 第8章 专题、分类、商品详情接口编写


    第8章 专题、分类、商品详情接口编写

    https://coding.imooc.com/learn/list/97.html

    8-1 Banner相关表分析(数据表关系分析) 14:37
    8-2 模型关联----定于关联与查询关联 16:25
    8-3 模型关联----嵌套关联查询 12:00
    8-4 隐藏模型字段 19:06
    8-5 在模型内部隐藏字段 13:05
    8-6 图片资源URL配置 16:54
    8-7 读取器的巧妙应用 14:40
    8-8 自定义模型基类 12:27
    8-9 定义API版本号 14:48
    8-10 专题接口模型分析 18:08
    8-11 一对一关系解析 09:26
    8-12 Theme接口验证与重构 22:19
    8-13 完成Theme简要信息接口 11:35
    8-14 开启路由完整匹配模式 08:30
    8-15 编写Theme详情接口 10:00
    8-16 数据库字段冗余的合理利用 12:45
    8-17 REST的合理利用 10:53
    8-18 最近新品接口编写 22:56
    8-19 使用数据集还是数组? 15:30
    8-20 分类列表接口编写 09:18
    8-21 扩展:接口粒度与接口分层 08:13
    8-22 分类商品接口编写 10:31


    8-1 Banner相关表分析(数据表关系分析) 14:37


    8-2 模型关联----定于关联与查询关联 16:25


    8-3 模型关联----嵌套关联查询 12:00

    功能:

    查出三表关联里对应的所有的字段

    banner表,banner_item表里是中间表,它有所关联的两个表的外键(banner_id,img_id),image表

    思路:

    1. 在controller控制器Banner.php里调用model层banner,model层Banner做一对多关联 hasMany()Banner_item表,
    2. model层BannerItem做定义相对关联 hasLongsTo() Image表,
    3. model层banner里$banner = self::with(['items','items.img'])->find($id);就可以查出三张表里符合条件的数据里

    controller里:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: Haima
     5  * Date: 2018/7/8
     6  * Time: 15:58
     7  */
     8 
     9 namespace appapicontrollerv1;
    10 use appapimodelBanner as BannerModel;
    11 use appapivalidateIDMustBePostiveInt;
    12 use applibexceptionBannerMissException;
    13 
    14 class Banner
    15 {
    16     /**
    17      * 获取指定id的banner信息
    18      * @url /banner/:id
    19      * @http GET
    20      * @id banner的id号
    21      */
    22     public function getBanner($id)
    23     {
    24         (new IDMustBePostiveInt())->goCheck(); //验证$id是否为正整数
    25 
    26         //调用model层的方法:
    27       //方法一:静态调用(当控制器和类名一样时用别名引入)
    28         // 这样调用model层,model的类不需要继承Model类,
    29         //但是调用的方法里需要自己写方法,在方法里写代码对库里的表进行操作
    30         $banner = BannerModel::getBannerById($id);//调用model
    31 
    32 
    33         if (!$banner){
    34            throw new BannerMissException(); //判断结果不存在,抛出异常
    35         }
    36 //        return json($banner,200);//返回json格式的结果, 默认就是200状态码,可不写
    37         return $banner;//返回json格式的结果, 默认就是200状态码,可不写
    38     }
    39 }

    model(banner.php)里:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: Haima
     5  * Date: 2018/7/12
     6  * Time: 1:16
     7  */
     8 
     9 namespace appapimodel;
    10 use thinkModel;
    11 
    12 class Banner extends Model //继承Model以后,Banner就变成一个模型层了
    13 {
    14 
    15     public function items()
    16     {
    17         //做一对多关联 hasMany('关联模型名','关联模型里关联本表的外键名','主表主键名',['模型别名定义']);
    18         return $this->hasMany('BannerItem','banner_id','id');
    19     }
    20     public static function getBannerById($id){
    21         //TODO 根据Banner 的 ID号 获取Banner信息
    22         //wiht('调用上面的items()模型关系方法','调用items()下定义相对的关联')
    23         $banner = self::with(['items','items.img'])
    24             ->find($id);
    25 
    26         return $banner;
    27     }
    28 }

    model(BannerItem.php)里:

     1 <?php
     2 
     3 namespace appapimodel;
     4 
     5 use thinkModel;
     6 
     7 class BannerItem extends Model
     8 {
     9     //对应的banner_item表里要隐藏的字段
    10     //(表名是带_的,model名字要大驼峰法命名,model和表才能自动映射)
    11     protected $hidden = ['id','img_id','banner_id','delete_time'];
    12 
    13     public function img(){
    14         //定义相对的关联 belongsTo()
    15         //第二层表(中间表)里有第三层表的外键.
    16         //在有外键的第二层表里用belongsTo()做定义相对的关联
    17         return $this->belongsTo('Image','img_id','id');
    18     }
    19 }

    访问结果:


    8-4 隐藏模型字段 19:06


    8-5 在模型内部隐藏字段 13:05

    model(BannerItem.php)里:

     1 <?php
     2 
     3 namespace appapimodel;
     4 
     5 use thinkModel;
     6 
     7 class BannerItem extends Model
     8 {
     9     //对应的banner_item表里要隐藏的字段
    10     //(表名是带_的,model名字要大驼峰法命名,model和表才能自动映射)
    11     protected $hidden = ['id','img_id','banner_id','delete_time'];
    12 
    13     public function img(){
    14         //定义相对的关联 belongsTo()
    15         //第二层表(中间表)里有第三层表的外键.
    16         //在有外键的第二层表里用belongsTo()做定义相对的关联
    17         return $this->belongsTo('Image','img_id','id');
    18     }
    19 }

    model(Image.php)里:

    <?php
    
    namespace appapimodel;
    
    use thinkModel;
    
    class Image extends Model
    {
       //只显示的字段
       protected $visible =['url','update_time'];
    }

    访问结果:

    没有用的结果都隐藏了

    只显示image表里需要的字段


    8-6 图片资源URL配置(读取配置文件里的参数) 16:54

    思路:

    读取setting.php和config.php的参数

    config.php可以是最外层的,也可以是自己模块下的

    控制器里:

     1 <?php
     2 /**
     3  * Created by PhpStorm.
     4  * User: Haima
     5  * Date: 2018/7/8
     6  * Time: 15:58
     7  */
     8 
     9 namespace appapicontrollerv1;
    10 use appapimodelBanner as BannerModel;
    11 use appapivalidateIDMustBePostiveInt;
    12 use applibexceptionBannerMissException;
    13 
    14 class Banner
    15 {
    16     /**
    17      * 获取指定id的banner信息
    18      * @url /banner/:id
    19      * @http GET
    20      * @id banner的id号
    21      */
    22     public function getBanner($id)
    23     {
    24         (new IDMustBePostiveInt())->goCheck(); //验证$id是否为正整数
    25 
    26         echo config('setting.url') . '<br>'; //拿setting.php里的参数
    27         echo config('app_namespace'); //拿config.php里的参数
    28         die;
    29         //调用model层的方法:
    30       //方法一:静态调用(当控制器和类名一样时用别名引入)
    31         // 这样调用model层,model的类不需要继承Model类,
    32         //但是调用的方法里需要自己写方法,在方法里写代码对库里的表进行操作
    33         $banner = BannerModel::getBannerById($id);//调用model
    34 
    35 
    36         if (!$banner){
    37            throw new BannerMissException(); //判断结果不存在,抛出异常
    38         }
    39 //        return json($banner,200);//返回json格式的结果, 默认就是200状态码,可不写
    40         return $banner;//返回json格式的结果, 默认就是200状态码,可不写
    41     }
    42 }

    setting.php里:(直接return array)

    config.php里:(直接return array)

    访问结果:

    读config.php里的二维数组:

      print_r(config('mt_config.mt_cancel_sh')[2001]); 

     

    引入vendor目录里的文件

    实例化后就可以使用引入实例的属性和方法了


    8-7 读取器的巧妙应用 14:40


    8-8 自定义模型基类 12:27


    8-9 定义API版本号 14:48


    8-10 专题接口模型分析 18:08


    8-11 一对一关系解析 09:26


    8-12 Theme接口验证与重构 22:19


    8-13 完成Theme简要信息接口 11:35


    8-14 开启路由完整匹配模式 08:30


    8-15 编写Theme详情接口 10:00


    8-16 数据库字段冗余的合理利用 12:45


    8-17 REST的合理利用 10:53


    8-18 最近新品接口编写 22:56


    8-19 使用数据集还是数组? 15:30


    8-20 分类列表接口编写 09:18


    8-21 扩展:接口粒度与接口分层 08:13


    8-22 分类商品接口编写 10:31

    [Haima的博客] http://www.cnblogs.com/haima/
  • 相关阅读:
    js angularjs 杂记
    myEclipse快捷键
    eclipse快捷键
    PL/SQL Developer 开发工具修改日期类型的值
    Tensor flow 实战Google深度学习框架 笔记摘要Pthree(二)
    Tensor flow 实战Google深度学习框架 笔记摘要Pthree
    Tensor flow 实战Google深度学习框架 笔记摘要Pfour(二)
    Tensor flow 实战Google深度学习框架 笔记摘要Pfour
    《神经网络与深度学习》讲义 邱锡鹏著 (仅数学基础部分)
    关于YOLO算法的备忘
  • 原文地址:https://www.cnblogs.com/haima/p/9428196.html
Copyright © 2020-2023  润新知