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;
}
}