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

posted @ 2018-04-09 17:40  智昕  阅读(649)  评论(0编辑  收藏  举报