• 关于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 appadmincontroller;
    use appadminmodelMember as MemberModel;
    use thinkController;
    use thinkDb;
    use thinkRequest;
    use appadminlogicCeping;
    
    /**
     * 关于TP5的一对一、一对多同时存在的关联查询
     * Class Member
     * @package appadmincontroller
     */
    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 appadminmodel;
    use thinkModel;
    
    /**
     * 主表(Member)的模型
     * Class Member
     * @package appadminmodel
     */
    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 appadminmodel;
    use thinkModel;
    
    /**
     * basic 表模型
     * @package appadminmodel
     */
    class Basic extends Model
    {
        /**
         * 建立和member表(主表)的关联
         * belongsTo的参数包括::belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型');
         */
        public function member()
        {
            return $this->belongsTo('Member');
        }
    }

    photo 的MODEL:

    <?php
    
    namespace appadminmodel;
    use thinkModel;
    
    /**
     * photo 表模型
     * @package appadminmodel
     */
    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打印出的数据如下

  • 相关阅读:
    【MSSQL】备份
    cenos7创建删除软连接ln s
    mybatis plus 条件构造器queryWrapper学习
    使用socket实现即时通讯
    vue动态合并行和列
    解决:/deep/ 不能正常使用 Expected selector
    java字符串日期格式相互转换
    Git使用git通过ssh连接linux:ssh 用户名@IP地址
    vue+element跨行跨列合并
    Centos7配置node环境
  • 原文地址:https://www.cnblogs.com/clubs/p/8907308.html
Copyright © 2020-2023  润新知