今天在用到TP5一对多关联模型,在这里先大根说下使用方法
首先我有二个表
一个表user用来存放个人信息 大概数据结构如下
CREATE TABLE `tp_user` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`age` varchar(30) NOT NULL DEFAULT '',
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
别一个表为inspect_xm 用于存放用户下的多个体检项目
CREATE TABLE `tp_inspect_xm` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL DEFAULT '',
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
建模型文件
接下来是新建对应两张数据表的模型类文件。在模块下新建一个model目录然后新建两个文件并按对应的表命名:
User模型对应的是 tp_User 表
<?php
namespace app\admin\model;
use think\Model;
/**
* 文章模型
* @package app\admin\model
*/
class User extends Model{
//uid为外键id是inspect_xm表关联user表的外键
//id是 User表的主键
public function InspectXm(){
return $this->hasMany('InspectXm','uid','id');
}
}
在User模型定义好关联的方法之后在InspectXm模型里可以不用写任何对应的方法,但是必须最少要有一个对应 tp_Inspect_xm 表的空模型。
<?php
namespace app\admin\model;
use think\Model;
class InspectXm extends Model{
}
控制器调用
在控制器想要使用关联模型就需要先引入模型类,比如我上面是在User模型里定义了关联的方法,就需要把User模型引入控制器。
use app\index\model\User
控制器中查询
<?php
// 体检管理
namespace app\admin\controller;
use think\Db;
use think\Cache;
//use app\admin\model\User;
use app\admin\model\User as Ins; //在使用上面的命名空间时我的报错提示冲突,然后我使用了别名
class Index extends Base{
public function index(){
//$Inspect = new Ins;
$Inspect = Ins::get(1); //查询ID为1的数据
$xm = $Inspect->InspectXm()->select()->toArray();
var_dump($xm);
}
}