ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
       banner(主表)                 **banner_item(从表)**                   img(主表) ![](https://img.kancloud.cn/e7/a9/e7a97a5794f54d4aad047f6d89a73b73_160x110.png) ![](https://img.kancloud.cn/85/ef/85ef771a4f89f6feb7f371f8bfd2b79f_199x111.png) ![](https://img.kancloud.cn/09/9f/099f640b69857b39d2d3aa0bc1eb7345_216x113.png) banner(主表) VS banneritem(从表)  一对多(主表的一个项中包含多个从表的项)   (hasMany) banner_item(从表) VS img(主表)   一对一      (belongsTo,它也是多对一)    这里用hasOne会报错 因为外键在banner\_item 一对多关联的情况也比较常见,使用`hasMany`方法定义, >[info] **主表建立一对多关联关系** >hasMany('关联从表模型名','从表外键名','主表主键名',\['模型别名定义'\]); >返回hasMany类对象 ## **主表模型中定义关联模型** Banner.php定义关联模型BannerItem ``` namespace app\index\model; use think\Model; use think\Db; class Banner extends Model{ public function items(){ return $this->hasMany('BannerItem','banner_id','id'); } //将数据操作业务封装到模型中 public static function getBannerById($id){ //TODO:根据bannerid号获取banner信息 ->fetchSql(true) $result=self::with(['items','items.image'])->find($id); return $result; } } ``` BannerItem.php 定义关联模型Img ``` namespace app\index\model; use think\Model; use think\Db; class BannerItem extends Model{ public function image(){ return $this->belongsTo('img','img_id','id'); } } ``` Img.php 可以是空模型 ``` namespace app\index\model; use think\Model; use think\Db; class Img extends Model{ } ``` 控制器调用 ``` \app\index\model\Banner::getBannerById(1)->toArray(); ```