0

0

laravel入门教程之表与表之间的关系

爱喝马黛茶的安东尼

爱喝马黛茶的安东尼

发布时间:2019-11-20 16:51:48

|

2710人浏览过

|

来源于CSDN

转载

laravel入门教程之表与表之间的关系

首先关于表与表之间的关系

1.一对一

2.一对多

3.多对一

4.多对多

区分父表与子表

1.”一”的是父表

2.”多”的一方是子表

如何处理一对多关系

在子表中建一个字段(外键)指向父表

如何处理多对多关系

建立一张中间表,将”多对多”关系转化为”一对多”

案例分析

表一: 用户表(it_user)

表二: 用户详情表(it_user_info)

表三: 文章表(it_article)

表四: 国家表(it_country)

表五: 用户角色表(it_role)

① 一对一

用户表(表一)与详情表(表二)就是一对一的关系

②一对多

用户表(表一)与文章表(表三)就是一对多的关系

③多对一

用户表(表一)与国家表(表四)就是多对一的关系

④多对多

用户表(表一)与角色表(表五)就是多对多的关系

用户表建表及测试数据

DROP TABLE IF EXISTS `it_user`;
CREATE TABLE `it_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) DEFAULT NULL COMMENT '用户名',
  `password` char(32) DEFAULT NULL COMMENT '密码(不使用md5)',
  `country_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `国家id` (`country_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user
-- ----------------------------
INSERT INTO `it_user` VALUES ('1', 'xiaoming', '123456', '1');
INSERT INTO `it_user` VALUES ('2', 'xiaomei', '123456', '1');
INSERT INTO `it_user` VALUES ('3', 'xiaoli-new', '123', '1');

用户详情表建表及测试数据

-- ----------------------------
-- Table structure for it_user_info
-- ----------------------------
DROP TABLE IF EXISTS `it_user_info`;
CREATE TABLE `it_user_info` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `tel` char(11) DEFAULT NULL,
  `email` varchar(128) DEFAULT NULL,
  `addr` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user_info
-- ----------------------------
INSERT INTO `it_user_info` VALUES ('1', '13012345678', 'xiaoming@163.com', '北京');
INSERT INTO `it_user_info` VALUES ('2', '15923456789', 'xiaomei@163.com', '上海');
INSERT INTO `it_user_info` VALUES ('3', '18973245670', 'xiaoli@163.com', '武汉');

文章表建表及测试数据

-- ----------------------------
-- Table structure for it_article
-- ----------------------------
DROP TABLE IF EXISTS `it_article`;
CREATE TABLE `it_article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_article
-- ----------------------------
INSERT INTO `it_article` VALUES ('1', '世界那么大,我想去看看', '钱包那么小,总是不够', '1');
INSERT INTO `it_article` VALUES ('2', '我想撞角遇到爱', '却是碰到鬼', '2');
INSERT INTO `it_article` VALUES ('3', '哈哈哈哈', '嘻嘻嘻嘻', '1');

国家表建表及测试数据

-- ----------------------------
-- Table structure for it_country
-- ----------------------------
DROP TABLE IF EXISTS `it_country`;
CREATE TABLE `it_country` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_country
-- ----------------------------
INSERT INTO `it_country` VALUES ('1', '中国');
INSERT INTO `it_country` VALUES ('2', '美国');

用户角色表建表及测试数据

-- ----------------------------
-- Table structure for it_role
-- ----------------------------
DROP TABLE IF EXISTS `it_role`;
CREATE TABLE `it_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_role
-- ----------------------------
INSERT INTO `it_role` VALUES ('1', '开发');
INSERT INTO `it_role` VALUES ('2', '测试');
INSERT INTO `it_role` VALUES ('3', '管理');

用户和角色中间表表建表及测试数据

-- ----------------------------
-- Table structure for it_user_role
-- ----------------------------
DROP TABLE IF EXISTS `it_user_role`;
CREATE TABLE `it_user_role` (
  `user_id` int(11) DEFAULT NULL,
  `role_id` int(11) DEFAULT NULL,
  KEY `role_id` (`role_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of it_user_role
-- ----------------------------
INSERT INTO `it_user_role` VALUES ('1', '1');
INSERT INTO `it_user_role` VALUES ('1', '2');
INSERT INTO `it_user_role` VALUES ('1', '3');
INSERT INTO `it_user_role` VALUES ('2', '1');
INSERT INTO `it_user_role` VALUES ('3', '2');

准备工作

1、规划路由

在routes/web.php下写如下路由:

//ORM的关联关系
Route::get('/orm/relation/{mode}','ORM\UserController@relation');

2、在App/Http/Controllers/ORM/UserController.php编写relation方法

    public function relation($mode)
    {
        switch ($mode){
            case '1_1':
            {
                //一对一
            }
            break;
            case '1_n':
            {
                //一对多
            }
                break;
            case 'n_1':
            {
                //多对一
            }
                break;
            case 'n_n':
            {
                //多对多
            }
                break;
            default;
        }
    }

3、安装debug调试工具

3.1使用composer命令安装

composer require  barryvdh/laravel-debugbar

3.2、修改config/app.php文件,加载debugbar到laravel到项目中,在’providers’数组中加入如下配置:

PHP 网络编程技术与实例(曹衍龙)
PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

下载
Barryvdh\Debugbar\ServiceProvider::class,

除了安装debugbar调试工具外,也可以使用查询监听:编providers/AppServiceProvider.php的boot方法中加入如下代码

\DB::listen(function ($query) {
    var_dump($query->sql);
     var_dump($query->bindings);
     echo '
'; });

也可以打印出执行的sql语句。

一对一

1、创建Userinfo模型对象

进入cmd命令行进入laravel项目所在目录执行以下命令

php artisan make:model Userinfo

会在App目录下生成Userinfo.php

2、编辑Userinfo模型文件

3、编写UserModel, 加入一对一方法

hasOne('App\Userinfo','user_id');
    }

4、编写UserController, 调用一对一方法

    public function relation($mode)
    {
        switch ($mode){
            case '1_1':
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            default;
        }
    }

一对多

1、创建article模型对象

执行命令

php artisan make:model Article

在app下生成Article.php文件

2、编写article模型文件

3、编写UserModel, 加入一对多方法

public function Artice()
    {
        return $this->hasMany('App\Article','User_id');
    }

4、编写UserController,调用一对多方法

    public function relation($mode)
    {
        switch ($mode){
            case '1_1':
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            case '1_n':
            {
                //一对多
                $data = UserModel::find(1)->Artice()->get();
                dd($data);
            }
                break;
            default;
        }
    }
}

多对一

1、创建country模型对象

执行命令

php artisan make:model Country

2、编写country模型文件

3、编写UserModel, 加入多对一方法

public function Country()
{
    return $this->belongsTo('App\Country','country_id');
}

4、编写UserController, 调用方法

public function relation($mode)
    {
        switch ($mode){
            case '1_1':
            {
                //一对一
                $data = UserModel::find(1)->Userinfo()->get();
                dd($data);
            }
            break;
            case '1_n':
            {
                //一对多
                $data = UserModel::find(1)->Artice()->get();
                dd($data);
            }
                break;
            case 'n_1':
            {
                //多对一
                $data = UserModel::find(1)->Country()->get();
                dd($data);
            }
                break;
            default;
        }
    }
}

多对多

1、创建role模型对象

执行命令

php artisan make:model Role

执行命令

php artisan make:model User_role

2、编写Role模型

编写User_role模型

因为表中没有主键字段,所以需要两个字段即可

3、编写UserModel, 加入多对多方法

    public function Role(){
        /*
         * 第一个参数:要关联的表对应的类
         * 第二个参数:中间表的表名
         * 第三个参数:当前表跟中间表对应的外键
         * 第四个参数:要关联的表跟中间表对应的外键
         * */
        return $this->belongsToMany('App\Role','user_role','user_id','role_id');
    }

4、编写UserController, 调用多对多方法

public function relation($mode)
{
    switch ($mode){
        case '1_1':
        {
            //一对一
            $data = UserModel::find(1)->Userinfo()->get();
            dd($data);
        }
        break;
        case '1_n':
        {
            //一对多
            $data = UserModel::find(1)->Artice()->get();
            dd($data);
        }
            break;
        case 'n_1':
        {
            //多对一
            $data = UserModel::find(1)->Country()->get();
            dd($data);
        }
            break;
        case 'n_n':
        {
            //多对多
           $data = UserModel::find(2)->Role()->get();
           dd($data);
        }
            break;
        default;
    }
}

总结:

1、一对一使用方法:hasOne()

2、一对多使用方法:hasMany()

3、多对一使用方法:belongsTo()

4、多对多使用方法:belongsToMany()

PHP中文网,大量的免费laravel入门教程,欢迎在线学习!

本文转自:https://blog.csdn.net/weixin_38112233/article/details/79220535

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2520

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1599

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1493

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1416

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号