THINKPHP5 一对多关联模型使用
今天在用到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); } }
如果在使用->toArray()报错的情况下可参考 http://www.cnblogs.com/lhm166/articles/8761387.html