10 关联模型《ThinkPHP6 入门到电商实战》

一、什么是关联模型

关联模型指在 tp 中使用模型对多个数据表进行关联。例如一个主账户表与一个账户信息表进行关联,此时两者关联后可以更加简便的进行操作,使代码更加清晰,操作更加简便。

二、 正向一对一关联

一对一关联指的是数据只有一条而非多条。

首先我们有一个 user 表如下:
在这里插入图片描述
接着给 student 表添加对应的 uid 列:
在这里插入图片描述
随后我们在model 文件夹下创建一个 User 的php 文件用于模型:
在这里插入图片描述
在 User 模型表中编写代码:

<?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name = 'user';
}

接着咱们在 User 模型中编写对应的关联代码(想要关联多张表在创建一个对应表名的方法和表模型即可):

<?php
namespace app\model;
use think\Model;class UserModel extends Model
{protected $name = 'user';public function student(){return $this->hasOne(StudentModel::class,'uid');}
}

在 student 方法中,hasOne 表示一对一关联,其中第一个参数 StudentModel::class 表示关联的表,而第二个参数表示其表中所关联的外键为 uid。

接着我们直接使用模型进行查询,看看是否成功关联。我们在 index 类中更改 usemodel 方法:

public function useModel(){$user = UserModel::find(7); return json($user->student->name); 
}

其中 UserModel 直接find 主键id 为 7 的数据,接着直接使用 json 返回 user 表下所关联的 student 表中的 name字段,查看是否成功获取,最后访问该方法的结果如下,成功获取到了数据:
在这里插入图片描述

三、 反向一对一关联

有了正向关联后反向关联咱们可以不用进行编写,但是你想编写也行,咱们在 student 模型类中编写代码如下:

<?php
namespace app\model;
use think\Model;class StudentModel extends Model
{protected $name = 'student';public function user() { return $this->belongsTo(UserModel::class); } 
}

四、一对多关联

一对多关联指主表关联的数据在副表中有多条对应,例如此时我在副表中右如下数据:
在这里插入图片描述
此时 uid 的值是有两条重复的,那么我们此时修改对应的 user 模型中的方法:

public function student(){//return $this->hasOne(StudentModel::class,'uid');return $this->hasMany(StudentModel::class,'uid');
}

修改 hasOne 成 hasMany 即可,此时修改对应的useModel 方法如下:

public function useModel(){$user = UserModel::find(['uid'=>20]); return json($user->student); 
}

结果如下:
在这里插入图片描述

此时还可以进行链式操作,查询身高大于 168 的数据:

public function useModel(){$user = UserModel::find(['uid'=>20]); return json($user->student()->where('height','>',168)->select()); 
}

结果如下:
在这里插入图片描述

五、关联模型的数据新增

使用关联模型进行数据新增,可直接使外键进行增加,只要考虑数据的新增即可,以下是代码示例:

public function useModel(){$user = UserModel::find(7); $res=$user->student()->saveAll([ ['name'=>'关联数据1', 'height'=>0], ['name'=>'关联数据2', 'height'=>0] ]);dump($res);}

此时我们首先是使用了 find,随后直接给与 student 数据新增,新增时不需要传入对应的 uid 数据,因为之前在模型中已经进行了设置外键,那么访问后数据库成功新增数据:
在这里插入图片描述
此时成功操作后所返回的内容是对应的模型数组:
在这里插入图片描述

六、关联删除

关联删除可使删除主表数据时同时删除副表数据,以下为示例:

public function useModel(){$user = UserModel::with('student')->find(7); $res=$user->together(['student'])->delete();dump($res);
}

在这里要注意,需要使用 with 方法,随后使用 together 传入一个副表数组,可以传入多个副表进行删除,返回值为布尔值:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云云计算ACP考试知识点(标红为重点)

阿里云云计算专业认证考试&#xff08;ACP&#xff09;&#xff08;ECS&#xff09; 什么是云服务器 ECS 云服务器 Elastic Compute Service&#xff08;ECS&#xff09;是阿里云提供的一种基础云计算服务。使用云服务器 ECS 就像使用水、电、煤气等资源一样便捷、高效。您无需…

C语言试题六十二之请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

Android 整体设计及背后意义

目录 1. Android设计的现实意义 1.1 发展的前提&#xff1a;硬件抽象 1.2 能力的枢纽&#xff1a;组件化 1.3 应用的基础-接口层 2. 对于我们的象征意义和实践 3. 小结 阿里妹导读&#xff1a;现实工作中经常可以听到这样的说法&#xff1a;框架的升级带来协议性能的提升…

数学的意蕴与价值(建议收藏)

数学的意蕴与价值,内容包括数学运算、长度面积等位换算等等,建议收藏。 意蕴1: 1x8+1=912x8+2=98123x8+3=9871234x8+4=987612345x8+5=98765123456x8+6=9876541234567x8+7=987654312345678x8+8=98765432123456789x8+9=987654321意蕴2: 1x9+2=1112x9+3=111123x9+4=11111234x9…

85、交换机安全MAC层***配置实验之Port-Security

1、Port Security解析触发Port Security的条件&#xff1a;未授权的MAC地址端口MAC地址数量超过了限制触发Port Security后的动作&#xff1a;protect Security violation protect mode 丢弃数据&#xff0c;不发送SNMP Trap消息 restrict Security violation restr…

C#-Linq源码解析之Concat

前言在Dotnet开发过程中&#xff0c;Concat作为IEnumerable的扩展方法&#xff0c;十分常用。本文对Concat方法的关键源码进行简要分析&#xff0c;以方便大家日后更好的使用该方法。使用Concat 连接两个序列。假如我们有这样的两个集合&#xff0c;我们需要把两个集合进行连接…

11 验证器《ThinkPHP6 入门到电商实战》

注&#xff1a;示例来源于官方手册 一、验证器定义 验证器用于对数据进行验证&#xff0c;你可以理解为一个“层”&#xff0c;在传入数据时可以使用这个层对数据进行验证&#xff0c;这样就可以不用频繁的在方法中编写代码去验证&#xff0c;只需要编写一个验证层即可&#…

合作开发和委托开发完成成果的归属

据专利法第8条的规定&#xff1a;“两个以上单位或者个人合作完成的发明创造、一个单位或者个人接受其他单位或者个人委托所完成的发明创造&#xff0c;除另有协议的以外&#xff0c;申请专利的权利属于完成或者共同完成的单位或者个人&#xff1b;申请被批准后&#xff0c;申请…

C语言试题六十三之请编写函数fun:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

1、 题目 请编写函数fun,其功能是:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 2 、温馨提示 C语言试题汇总里可用于计算机二级C语言笔试、机试、研究生复试中C程序设计科目、帮助C语言学者打好程序基础、C语言基础,锻炼您…

nginx+php

nginxphp基础架构 生产实践 nginx配置文件: 主配置文件 123456789101112131415161718192021222324252627282930313233[rootlinux-node1 conf.d]# cat /etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load…

【ArcGIS风暴】ArcGIS10.8中栅格数据金字塔的来龙去脉,你知道吗?

如下图所示,通常情况下,当将没有金字塔的栅格数据集添加至 ArcGIS时,系统将提示您构建金字塔。金字塔指不同比例下分辨率降低的数据概视图。金字塔十分有用,因为金字塔提升了分辨率低于其全分辨率的栅格数据集的绘制速度。建议构建用于大型栅格数据集的金字塔。 点击【是】…

斯坦福大学Andrew Ng - 机器学习笔记(8) -- 推荐系统 大规模机器学习 图片文字识别...

大概用了一个月&#xff0c;Andrew Ng老师的机器学习视频断断续续看完了&#xff0c;以下是个人学习笔记&#xff0c;入门级别&#xff0c;权当总结。笔记难免有遗漏和误解&#xff0c;欢迎讨论。 鸣谢&#xff1a;中国海洋大学黄海广博士提供课程视频和个人笔记&#xff0c;在…

表单按钮实现 type=image

<input type"image" src"http://img01.51jobcdn.com/im/2012/index/main_login_btn.gif" border"0" οnfοcus"blur()">转载于:https://www.cnblogs.com/zxmbest1/p/5121666.html

.NET7之MiniAPI(特别篇) .NET Preview5参数绑定

.NET Preview5中&#xff0c;给MiniAPI带来了一个参数绑定的功能&#xff0c;看到这个功能&#xff0c;我一下子就开心了&#xff0c;因为它提供了一个把松散的传入数据或注入功能耦合在一起的能力&#xff0c;并且可以根据自己的需求自由组合&#xff0c;结合上原来的Fromxxx(…

C语言试题六十四之请编写函数fun:求勾股数

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

【CSS动效实战(纯CSS与JS动效)】02 flex 布局实战(仿 JD 及 gitCode 布局)及 media 自适应初探 下

二、flex 仿 gitCode 布局 及 自适应 首先查看我们的页面&#xff1a; 这个时候直接顶部一个块&#xff0c;下面分为左中右三个块&#xff0c;然后就解决了&#xff0c;是不是很简单&#xff1f;相比刚刚那么这个简单多了。那就来做吧。 2.1 基本布局 首先给一个 style 价格…

C语言按行和列求平均成绩代码(指针,二维数组)

如下所示成绩表,如何按行(每个人)或按列(每门课)的平均成绩? 结果: 文章目录 1. 自定义行平均函数2. 自定义列平均函数3. main()函数调用平均函数1. 自定义行平均函数 float save(float **PA,int M,int

架构师必须知道的架构设计原则

目录 一、前言 二、软件设计原则 GRASP通用职责分配软件模式 1. 信息专家(Information Expert) 2. 创建者(Creator) 3. 低耦合(Low Coupling) 4. 高内聚(High Cohesion) 5.控制器(Controller) 6. 多态(Polymorphism) 7. 纯虚构(Pure Fabrication) 8. 间接(Indirectio…

LeetCode:Minimum Path Sum(网格最大路径和)

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 典型的动态规划问题。 设dp[i][j]表示从左…

delete在js里为引用删除

delete 运算符从对象中删除一个属性&#xff0c;或从数组中删除一个元素。delete expressionexpression 参数是一个有效的 JScript 表达式&#xff0c;通常是一个属性名或数组元素。说明如果 expression 的结果是一个对象&#xff0c;且在 expression 中指定的属性存在&#xf…