ThinkPHP 8的一对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
编程与应用开发_夏天又到了的博客-CSDN博客
每个主模型都有多个关联模型,一般在关联模型添加一个外键实现,在模型中使用hasMany定义。下面是用户和地址的一对多关联示例。首先在mydb数据库中创建address表及其数据(表比较简单,我们赋予这表一个意义,即保存用户游玩过的省份。建议读者直接用MySQL Workbench工具快速完成),SQL语句如下:
CREATE TABLE `address` (`aid` int NOT NULL AUTO_INCREMENT,`id` int NOT NULL,`province` varchar(45) COLLATE utf8mb3_unicode_ci NOT NULL,PRIMARY KEY (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
INSERT INTO `mydb`.`address`(`aid`,`id`,`province`) VALUES(1,1, '北京' );
INSERT INTO `mydb`.`address`(`aid`,`id`,`province`) VALUES(2,1, '上海' );
INSERT INTO `mydb`.`address`(`aid`,`id`,`province`) VALUES(3,1, '广东' );
1. 用户模型
用户模型示例如下:
<?php
namespace app\model;use think\Model;class UserModel extends Model
{protected $table = 'users';// 设置字段信息protected $schema = ['id' => 'int','name' => 'string','nickname' => 'string','status' => 'int',];public function profile(){return $this->hasOne(ProfileModel::class,'id'); // hasOne}// 在一对一关联示例代码的基础上,再加一个一对多关联方法public function addresses(){return $this->hasMany(AddressModel::class, 'id'); // hasMany}
}
2. 地址模型
地址模型示例如下:
<?php
namespace app\model;use think\Model;class AddressModel extends Model
{ protected $table = 'address';// 设置字段信息protected $schema = ['aid' => 'int','id' => 'int','province' => 'string',];
}
3. 关联查询
由于只有同一个数据库的数据表可以与表相连,因此在分库分表的场景下,笔者建议使用with查询两次的方法。
<?php
namespace app\controller;use think\Model;
use app\model\UserModel;
use app\model\ProfileModel;class User {public function one2many(){$users = UserModel::with('addresses')->select();foreach ($users as $user) {foreach($user->addresses as $address) {print_r($user->name.', '. $address->province.'<br>');}}}
}
上面2个模型1个控制器完成后,运行服务器,在浏览器中访问http://localthost:8000/user/one2many,可以关联查询出id为1的用户所有游玩过的省份。
4. 关联保存
使用关联模型的saveAll方法保存关联数据。下面是批量保存地址的示例:
$user = UserModel::find(2);
$user->addresses()->saveAll([['province'=>'北京'],['province'=>'上海'],
]);
5. 关联删除
和一对一关联相同,一对多关联也使用together方法删除关联数据。示例如下:
$user->together(['addresses'])->delete();


相关文章:
ThinkPHP 8的一对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
Django简介与虚拟环境安装Django
目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …...
Redis延迟队列详解
以下是对 Redis 延迟队列的详细解释: 一、什么是 Redis 延迟队列 Redis 延迟队列是一种使用 Redis 实现的消息队列,其中的消息在被消费之前会等待一段时间,这段时间就是延迟时间。延迟队列常用于一些需要延迟处理的任务场景,例如订…...
一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用
一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…...
第二代增强-采购申请屏幕增强
这篇文章可能有点乱,但是都是学习的一个过程,问题就是在ME52N修改采购申请增强字段之后,点击保存之后无法更新到数据库,困扰了很久,终于解决了,特此记录 文章目录 需求创建增强结构测试屏幕ZXM02TOP创建屏幕…...
图论DFS:黑红树
我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法…...
零基础一篇打通Vue极速通关教程
文章目录 写给零基础看的Vue极速掌握教程第1章 Vue简介1.1 Vue 概述1.2 MVVM 模式1.3 WebStorm开发工具1.3.1 WebStorm简介1.3.2 集成Vue开发调试工具 第2章 Vue的事件绑定2.1 Vue基本使用2.1.1 插值表达式2.1.2 注意事项 2.2 Vue事件绑定2.1.1 点击事件2.2.2 键盘事件2.2.3 移…...
商城系统中的常见 BUG
以下是商城系统中一些常见的 BUG: 功能与操作类 支付问题:如无法成功完成支付,支付过程中出现延迟、错误或订单重复支付等,还可能因网络问题导致支付失败或数据不一致。 登录 / 注册问题:用户在注册或登录时可能遇到…...
下定决心不去读研了。。。
大家好,我是苍何。 之前发表过一篇文章,表达了自己读研的困惑和纠结,得到了大家很多的建议,也引起了很多人的共鸣,在留言区分享了自己的故事,看着这些故事,我觉得都够苍何写一部小说了。 可惜苍…...
100个网络基础知识
1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示…...
庄小焱——2024年博文总结与展望
摘要 大家好,我是庄小焱。岁末回首,2024 年是我在个人成长、博客创作以及生活平衡方面收获颇丰的一年。这一年的经历如同璀璨星辰,照亮了我前行的道路,也为未来的发展奠定了坚实基础。 1. 个人成长与突破 在 2024 年,…...
高通8255 Android STR 启动失败要因分析调查
目录 背景: 调查过程: 步骤1: slog2info | grep vmm_service 步骤2: slog2info | grep qvm 总结: 解决方案 背景: 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后,脱出STR时…...
Qt QML专栏目录结构
第1章 走进Qt Quick的世界... 4 ★1.4 Qt Quick应用... 4 ★1.5 Qt Quick UI项目(qmlproject工程) 4 第2章 QML语法... 4 ★2.2 import导入语句... 4 ★2.3 QML类型系统... 5 ★2.4 对象特性(Attributes)... 6 三个等于号JavaScript语…...
“深入浅出”系列之FFmpeg:(3)音视频开发的学习路线和必备知识
一、岗位要求 音视频开发属于我自己想要学习的板块,我想知道公司招聘音视频开发工程师所需要的条件,于是我就从招聘网站上找来了几个有关音视频开发的岗位需求,内容仅供参考: (1)算法工程师-视频编解码 …...
Webpack简述
一、为什么要构建工具 人类喜欢书写的代码以及开发方式计算机不喜欢,构建工具的作用就是让人类舒舒服服写自己喜欢的代码,然后一打包生成计算机喜欢的代码 第一个webpack自身仅仅是将我们引入的模块打包成一个文件(编译import)&am…...
解决 Error: Invalid or corrupt jarfile day04_studentManager.jar 报错问题
在 Java 开发过程中,我们可能会遇到这样的报错信息:Error: Invalid or corrupt jarfile day04_studentManager.jar。这个错误通常表示 day04_studentManager.jar 文件可能已损坏或无效,下面将为大家详细介绍如何解决这个问题。 一、错误点分…...
ACL基础理论
ACL ——访问控制列表 ACL属于策略的一种 ACL访问控制列表的作用: 访问控制:在路由器流量流入或流出的接口上,匹配流量,然后执行设定好的动作:permit(允许)、deny(拒绝ÿ…...
庄周梦蝶1
和尚大概的意思如下:人的每一个梦境都是一个世界,这些世界统称三千世界。每一个世界当中所谓时间的跨度不同,发展程度不同,但是里面都有一个你。这些世界是同时存在的,所以不存在未来过去和现在,因为你就存…...
使用SIPP发起媒体流性能测试详解
使用SIPP发起媒体流性能测试详解 一、SIPP工具简介二、测试前的准备三、编写测试脚本四、运行测试五、分析测试结果六、总结SIPP(SIP Performance Protocol)是一个开源工具,专门用于SIP(Session Initiation Protocol)协议的性能测试和基准测试。SIP是一种用于控制多媒体通…...
瑞利衰落信道机理的详解
瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型,用于描述信号在无线信道中的传播特性。这种模型假设信号通过无线信道后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布…...
抖音下载器技术方案:双引擎策略架构与高效内容获取系统
抖音下载器技术方案:双引擎策略架构与高效内容获取系统 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...
告别Cartographer重定位慢:3个优化技巧与子图筛选源码解析
Cartographer重定位性能优化实战:从源码解析到参数调优全指南 在机器人定位与建图领域,Cartographer凭借其出色的SLAM算法表现成为工业界和学术界的宠儿。但当场景切换到重定位场景时,许多开发者都会遇到一个共同的痛点——匹配速度慢得令人抓…...
前端性能优化:从加载速度到渲染性能的全面突破
前端性能优化策略资源加载优化 压缩静态资源(HTML/CSS/JS)使用工具如Webpack的TerserPlugin或CSSNano。启用Gzip/Brotli压缩减少传输体积。通过<link rel"preload">预加载关键资源,使用HTTP/2协议提升并行加载效率。图片与媒…...
Stable Diffusion模型分类详解:从入门到精通Anything V5二次元生成
Stable Diffusion模型分类详解:从入门到精通Anything V5二次元生成 1. Stable Diffusion模型概述 Stable Diffusion作为当前最流行的开源图像生成模型,其核心价值在于能够根据文本描述生成高质量的图像。模型的质量和风格直接影响生成结果,…...
K-Means与K-Median:从原理到实战的聚类算法深度解析
1. 聚类算法入门:从菜市场到数据科学 第一次听说聚类算法时,我正站在菜市场的西红柿摊位前。摊主把西红柿按大小分堆摆放——大的卖5元,中的3元,小的2元。这种无师自通的分类智慧,正是聚类算法最生动的写照。在数据科学…...
SecGPT-14B惊艳效果:对TLS握手失败日志进行证书链异常与中间人检测
SecGPT-14B惊艳效果:对TLS握手失败日志进行证书链异常与中间人检测 1. 引言:当AI遇到网络安全 想象一下这个场景:你的服务器日志里突然出现了一堆TLS握手失败的记录。作为运维或安全工程师,你的第一反应是什么?是手动…...
具身智能2026:从Demo秀场到工业量产落地的关键拐点
具身智能的发展现状具身智能(Embodied AI)通过将AI模型与物理实体结合,实现感知、决策与行动的闭环。2023-2024年,该领域主要集中在实验室Demo和特定场景的小规模验证,例如机器人抓取、自动驾驶测试等。技术瓶颈包括环…...
Nanbeige像素冒险聊天终端部署实战:5分钟拥有你的像素游戏AI助手
Nanbeige像素冒险聊天终端部署实战:5分钟拥有你的像素游戏AI助手 1. 引言:当AI对话遇上复古像素风 想象一下这样的场景:你打开一个聊天界面,映入眼帘的不是冷冰冰的现代极简设计,而是充满怀旧感的像素风格UI。湛蓝色…...
再次革新 .NET 的构建和发布方式(一)氨
本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...
如何高效使用LeagueAkari:掌握英雄联盟LCU工具集的终极指南
如何高效使用LeagueAkari:掌握英雄联盟LCU工具集的终极指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否厌倦了在英雄联盟…...
