zoukankan      html  css  js  c++  java
  • thinkphp5.0 模型关联

    banner相关数据表字段一览

    表banner_item
    id
    img_id 外键,关联image表
    key_word 执行关键字,根据不同的type含义不同
    type 跳转类型,可能导向商品,可能导向专题,可能导向其他。0,无导向; 1:导向商品;2:导向专题
    delete_time
    banner_id 外键,关联banner表
    update_time

    表banner
    id
    name Banner名称,通常作为标识
    description Banner描述
    delete_time
    update_time

    表image
    id
    url 图片路径
    from 1 来自本地,2 来自公网
    delete_time
    update_time

    Banner相关表分析

    banner指banner位,banner_item是具体的banner项
    一个banner位有多个banner_item,一个banner_item是能属于一个banner,所以是一对多的关系
    banner_item与image是一对一关系

    使用命令新建BannerItem模型

    php think make:model api/BannerItem
    

    查看生成的文件
    applicationapimodelBannerItem.php

    <?php
    
    namespace appapimodel;
    
    use thinkModel;
    
    class BannerItem extends Model
    {
        
    }
    
    

    Banner模型关联BannerItem模型

    applicationapimodelBanner.php

    <?php
    
    namespace appapimodel;
    
    class Banner extends Model
    {
        public function items()
        {      
            //一对多关系使用
            //参数:1.关联模型名 2.关联外键 3.关联模型主键
            return $this->hasMany('BannerItem', 'banner_id', 'id');
        }
    }
    

    使用
    applicationapicontrollerv1Banner.php

    <?php
    
    namespace appapicontrollerv1;
    
    
    use appapivalidateIDMustBePositiveInt;
    use appapimodelBanner as BannerModel;
    
    /**
     * Banner资源
     */ 
    class Banner
    {
        public function getBanner($id)
        {
            $validate = new IDMustBePositiveInt();
            $validate->goCheck();
            $banner = BannerModel::with('items')->find($id);
            if (!$banner) {
                throw new BannerMissException();
            }
            return $banner;
        }
    }
    

    查看返回结果

    使用命令新建Image模型

    php think make:model api/Image
    
    <?php
    
    namespace appapimodel;
    
    use thinkModel;
    
    class Image extends Model
    {
    
    }
    

    关联到Image模型

    applicationapimodelBannerItem.php

    <?php
    
    namespace appapimodel;
    
    use thinkModel;
    
    class BannerItem extends Model
    {
    
        public function img()
        {
            //一对一关系使用
            //参数:1.关联模型名 2.关联外键 3.关联模型主键
            return $this->belongsTo('Image', 'img_id', 'id');
        }
    }
    

    使用
    applicationapicontrollerv1Banner.php

    class Banner
    {
        public function getBanner($id)
        {
            $validate = new IDMustBePositiveInt();
            $validate->goCheck();
            //嵌套关联查询
            $banner = BannerModel::with(['items', 'items.img'])->find($id);
            return $banner;
        }
    }
    

    返回的数据

    从规范性来看,把查询的代码封装下更好

    applicationapimodelBanner.php

    class Banner extends Model
    {
        public function items()
        {
            return $this->hasMany('BannerItem', 'banner_id', 'id');
        }
        public static function getBannerById($id)
        {
            $banner = self::with(['items','items.img'])
                ->find($id);
    
            return $banner;
        }
    }
    

    applicationapicontrollerv1Banner.php

    class Banner
    {
        public function getBanner($id)
        {
            $validate = new IDMustBePositiveInt();
            $validate->goCheck();
            $banner = BannerModel::getBannerById($id);
            if (!$banner) {
                throw new BannerMissException();
            }
            return $banner;
        }
    }
    
  • 相关阅读:
    swift textfiled 输入完毕 return 隐藏键盘 方法
    第一篇,仅是为了纪念
    ASP.NET MVC之验证终结者篇
    ASP.NET MVC扩展之HtmlHelper辅助方法
    Java历程-初学篇 Day04选择结构(1)
    Java历程-初学篇 Day03扫描仪与类型转换
    Java历程-初学篇 Day02变量,数据类型和运算符
    Java历程-初学篇 Day01初识java
    简单工厂模式和策略模式理解
    工厂模式和策略模式的区别
  • 原文地址:https://www.cnblogs.com/Qyhg/p/14756208.html
Copyright © 2011-2022 走看看