关于TP5的一对一对多同时存在的关联查询

Posted 头大的冯冯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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打印出的数据如下

以上是关于关于TP5的一对一对多同时存在的关联查询的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5.6 Eloquent ORM 关联关系,一对一和一对多

MyBatis关于多表联查 关联关系之一--------一对多(单条sql语句查询)

10.关联关系查询

mybatis07--关联查询一对多

Doctrine - 从反面查询一对多、单向的连接表关联

MyBatis高级篇 - 关联查询(一对多)