第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 app\api\controller\v1;
10 use app\api\model\Banner as BannerModel;
11 use app\api\validate\IDMustBePostiveInt;
12 use app\lib\exception\BannerMissException;
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 app\api\model;
10 use think\Model;
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 app\api\model;
 4 
 5 use think\Model;
 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 app\api\model;
 4 
 5 use think\Model;
 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 app\api\model;

use think\Model;

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 app\api\controller\v1;
10 use app\api\model\Banner as BannerModel;
11 use app\api\validate\IDMustBePostiveInt;
12 use app\lib\exception\BannerMissException;
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

posted @ 2018-08-06 06:52  HaimaBlog  阅读(800)  评论(0编辑  收藏  举报