关于TP5的一对一、一对多同时存在的关联查询
主表SQL(tp_member)
CREATE TABLE `tp_member` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`username` varchar(50) DEFAULT NULL COMMENT '用户名',
`password` varchar(50) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
tp_basic表SQL
CREATE TABLE `tp_basic` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_id` mediumint(8) DEFAULT NULL COMMENT 'uid',
`city` varchar(50) DEFAULT NULL COMMENT '城市',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
tp_photo表SQL
CREATE TABLE `tp_photo` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`member_id` mediumint(8) DEFAULT NULL,
`url` varchar(80) DEFAULT NULL COMMENT '链接地址',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
member 的controller:
<?php namespace app\admin\controller; use app\admin\model\Member as MemberModel; use think\Controller; use think\Db; use think\Request; use app\admin\logic\Ceping; /** * 关于TP5的一对一、一对多同时存在的关联查询 * Class Member * @package app\admin\controller */ class Member extends Controller { public function index() { $member=new MemberModel(); //查询一条ID为2的用户数据;toArray()是将结果转为数组。 $list=$member->with('photo,basic')->find('2')->toArray(); dump($list); } }
member 的MODEL:
<?php namespace app\admin\model; use think\Model; /** * 主表(Member)的模型 * Class Member * @package app\admin\model */ class Member extends Model { /** * 建立和basic的关联 * hasOne方法的参数包括:hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型'); */ public function basic() { return $this->hasOne('Basic','member_id'); } /** * 建立和photo的关联 * hasMany方法的参数包括:hasMany('关联模型名','外键名','主键名',['模型别名定义']); */ public function photo() { return $this->hasMany('Photo','member_id'); } }
basic 的MODEL:
<?php namespace app\admin\model; use think\Model; /** * basic 表模型 * @package app\admin\model */ class Basic extends Model { /** * 建立和member表(主表)的关联 * belongsTo的参数包括::belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型'); */ public function member() { return $this->belongsTo('Member'); } }
photo 的MODEL:
<?php namespace app\admin\model; use think\Model; /** * photo 表模型 * @package app\admin\model */ class Photo extends Model { /** * 建立和member表(主表)的关联 * belongsTo的参数包括::belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型'); */ public function member() { return $this->belongsTo('Member'); } }
访问http://localhost/tp_test/public/index.php/admin/Member/index打印出的数据如下