当前位置: 首页 > news >正文

thinkphp6入门(14)-- 多关联模型查询

背景:

有3个数据表,一个User表,一个Cloth表,一个Shoe表。

Cloth表和Shoe表分别和User表通过user_id关联。

thinkphp 6中如何通过模型查询所有用户,其中包括每个用户的cloth和shoe。

多关联模型查询:

1. User模型 (app\model\User.php):

namespace app\model;use think\Model;class User extends Model
{// 设置表名(如果与默认的表名不同)protected $table = 'user';// 关联到Cloth模型public function cloths()
{return $this->hasMany('App\model\Cloth', 'user_id');}// 关联到Shoe模型public function shoes()
{return $this->hasMany('App\model\Shoe', 'user_id');}
}

2. Cloth模型 (app\model\Cloth.php):

namespace app\model;use think\Model;class Cloth extends Model
{// 设置表名(如果与默认的表名不同)protected $table = 'cloth';// 关联到User模型public function user()
{return $this->belongsTo('App\model\User', 'user_id');}
}

3. Shoe模型 (app\model\Shoe.php):

Cloth模型类似,确保Shoe模型也有与User的关联关系。

4. 查询所有用户及其关联的Cloth和Shoe:

在控制器或其他地方,可以这样查询:


use app\model\User;// 查询所有用户及其关联的Cloth和Shoe数据
$users = User::with(['cloths', 'shoes'])->select();// 输出结果(例如,使用dump函数)
dump($users);

这段代码首先使用with()方法指定要加载的关联数据(即clothsshoes),然后使用select()方法执行查询。查询结果将是一个包含所有用户及其关联的ClothShoe数据的数组。每个用户对象都会包含与其关联的ClothShoe数据。

5. 增加查询条件


use app\model\User;// 查询所有用户及其关联的Cloth和Shoe数据
$users = User::with(['cloths', 'shoes'=>  function (Query $query) {$query->where('is_delete', 0);}])->where('is_member', 1)->select();// 输出结果(例如,使用dump函数)
dump($users);

关于如何解决不同模型间字段名重复的问题,参考:

https://www.kancloud.cn/manual/thinkphp6_0/1037600

效果类似

图片

by 软件工程小施同学 

相关文章:

  • 项目经验简单总结
  • SpringValidation自定义注解以及分组校验
  • 第6章-第1节-Java中基本数据类型的包装类
  • 松松2023年工作汇报
  • 通过data恢复postgresql
  • 【蓝桥杯】比赛大纲整理
  • RK3568驱动指南|第九篇 设备模型-第95章 创建属性文件并实现读写功能实验1
  • 详解卡尔曼滤波(Kalman Filter)
  • vue常见面试题
  • C++:第十一讲DFS深搜
  • 后端开发——jdbc的学习(一)
  • 企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment
  • 【MySQL】数据库中为什么使用B+树不用B树
  • 冒泡排序算法
  • 集群部署篇--Redis 集群动态伸缩
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 4个实用的微服务测试策略
  • ES10 特性的完整指南
  • java取消线程实例
  • js操作时间(持续更新)
  • leetcode388. Longest Absolute File Path
  • LeetCode算法系列_0891_子序列宽度之和
  • Object.assign方法不能实现深复制
  • PAT A1120
  • 阿里云前端周刊 - 第 26 期
  • 半理解系列--Promise的进化史
  • 给第三方使用接口的 URL 签名实现
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 三分钟教你同步 Visual Studio Code 设置
  • nb
  • 7行Python代码的人脸识别
  • ​如何在iOS手机上查看应用日志
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Matlab)使用竞争神经网络实现数据聚类
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (动态规划)5. 最长回文子串 java解决
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (剑指Offer)面试题34:丑数
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十五)使用Nexus创建Maven私服
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)http-server应用
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***测试-HTTP方法
  • .gitignore文件_Git:.gitignore
  • .net反编译的九款神器
  • .NET企业级应用架构设计系列之开场白
  • .NET轻量级ORM组件Dapper葵花宝典