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;
        }
    }
    
  • 相关阅读:
    GridSearchCV.grid_scores_和mean_validation_score报错
    scikit-learn使用fetch_mldata无法下载MNIST数据集的问题
    Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题
    Jupyter导出PDF从入门到绝望(已解决)
    食谱数据库数据找不到的问题
    TensorBoard计算加速
    TensorBoard可视化
    TensorFlow高层封装:从入门到喷这本书
    <!DOCTYPE html> 详解
    不同数据库之间表数据的迁移
  • 原文地址:https://www.cnblogs.com/Qyhg/p/14756208.html
Copyright © 2011-2022 走看看