°

tp5的模型关联详解

PHP实战视频教程大全

tp5的模型关联在我们通过模型做数据查询的时候扮演着非常重要的角色,更重要的是通过tp5的模型关联我们可以很简单的操作复杂的数据关联查询。
比如当前我们有两张具有关联关系的数据表

adpos:广告位表

ad:广告表


adpos广告位表已经ad广告表,其中ad表中具有关联外键adpos_id,也就是adpos为主表,ad为从表,现在我们需要使用模型的方法通过主表查询从表的信息:
首先我们要明确这两张表的对应关系,一个广告位可以包含多个广告,即为一对多的关系。
接着我们在model文件夹中创建两个模型文件:adpos.php和ad.php,
同时我们还在controller中创建了adpos.php这样一个控制器,比如id等于8的这个广告位中就含有3个广告项,如果不考虑关联,在adpos.php控制器中我们可以这样通过model查询:

[php]
namespace app\admin\controller;

class Adpos extends Common
{
    public function getads(){
        $res=model(‘adpos’)->find(8);
        return $res;
    }
}
[/php]

得到如下结果:


当然上面是没有考虑关联的情况,下面我们来设置关联,找到adpos.php主表模型,定义一下函数:

[php]
namespace app\admin\model;
use think\Model;
class Adpos extends Model
{
    public function items(){
        return $this->hasMany(‘ad’,’adpos_id’,’id’);
    }
}
[/php]

上面的items函数即为关联函数,hasMany为两个表的关联关系表示一对多,其中有三个参数分别代表关联的从表的模型,外键,以及当前主表的主键id,定义好了关联关系便可以使用了,我们回到adpos.php模型:

[php]
namespace app\admin\model;
use think\Model;
class Adpos extends Model
{
    public function items(){
        return $this->hasMany(‘Ad’,’adpos_id’,’id’);
    }

    public function getads(){
        $adpos=Adpos::find(8);
        $res=$adpos->items;
        return $res;
    }
}
[/php]

控制器的查询方式也改动下:

[php]
namespace app\admin\controller;

class Adpos extends Common
{
    public function getads(){
        $res=model(‘Adpos’)->getads();
        return json($res);
    }
}
[/php]

打赏
  喜欢