前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)

TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)

作者头像
全栈程序员站长
发布于 2022-07-08 03:12:51
发布于 2022-07-08 03:12:51
1.5K02
代码可运行
举报
运行总次数:2
代码可运行

数据库设计中,常常会有如下这种关联模型,分类表中一条分类对应多个商品表中的商品

如果要获得分类表中每条分类 以及 对应的商品的信息,则需要先查询分类表中的数据,然后根据结果遍历查询商品表,最后把数据拼接在一起

TP5中关联模型可以解决这一问题

普通关联

先创建分类表模型 /application/common/model/Category.php 以及商品表模型 /application/common/model/Goods.php

在分类表中创建关联

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace app\common\model; class Category extends Base { public function goods(){ return $this->hasMany('Goods','category_id','id'); } }

接着就可以使用关联模型查询数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public function list(){ return CategoryModel::with('goods')->where(true)->select(); }

嵌套关联

/application/common/model/Category.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Category extends Model { public function product(){ return $this->hasMany('product','category_id','id'); } }

/application/common/model/Goods.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Product extends Model { public function property(){ return $this->hasMany('property','goods_id','id'); } }

在控制器中调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public function index() { return Category::with('product,product.property')->where('id',1)->find(); }

在调用关联模型查询数据时,如果我们需要动态隐藏字段,或者给记录排序时可以这么做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Category extends Model { public function product(){ return $this->hasMany('product','category_id','id'); } public function list(){ //在with中可以传递一个闭包函数,函数的参数为当前key锁对应模型的查询器 $this //在闭包函数中无需使用select或者find等返回数据 //如下操作返回 category中所有值,以及对应 product ,并且product按照price排序 return self::with([ 'product'=>function($query){ $query->with('property')->field('name')->order('price'); } ])->select(); } }

建立原则

1. 哪张表中建立外键那么那张表就是从表  

2. 理论上可以在关联的两张表中建立关联关系,例如用户表User 和用户信息表 Profile 是一对一的关系,假设在Profile表中user_id字段指向User表的id字段,那么在User表中可以建立外键

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function profile(){ return $this->hasOne('profile','user_id','id'); }

也可以在Profile表中建立

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function user(){ return $this->belongsTo('user','user_id','id'); }

建立原则:在哪张表中调用就在哪张表中建立,例如,通常情况下我们是希望通过查找用户user的同时也输出用户信息,所以我们查找的是user表,所有就在user表中建立关联

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112470.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
20 个 Laravel Eloquent 必备的实用技巧
Eloquent ORM 看起来是一个简单的机制,但是在底层,有很多半隐藏的函数和鲜为人知的方式来实现更多功能。在这篇文章中,我将演示几个小技巧。
猿哥
2019/07/25
1.2K0
3分钟短文:Laravel 模型一对一关联关系这俩啥区别
本期我们把目光投向laravel模型的关联关系上。框架提供的关联关系,有很多种,其中对于一对一的关系, 有两个写法,一个是 belongsTo,一个是 hasOne,这俩到底啥区别,本文就来说一说。
程序员小助手
2020/09/10
2.7K0
3分钟短文:说说Laravel模型中还算常用的2个“关系”
上一章我们介绍了比较简单的laravel模型关联关系中的一对一,介绍了关联操作方法。
程序员小助手
2020/10/13
2.1K0
3分钟短文:说说Laravel模型中还算常用的2个“关系”
跟我一起学Laravel-EloquentORM进阶部分
假设User模型关联了Phone模型,要定义这样一个关联,需要在User模型中定义一个phone方法,该方法返回一个hasOne方法定义的关联
用户2131907
2019/02/27
4K0
opencart3调用三级菜单level 3 sub categories
  Opencart 3的menu菜单默认只调用一级和二级菜单,但很多电商网站类目复杂,三级菜单一般都是需要的,甚至更深,那么如何调用三级菜单level 3 sub categories呢?ytkah有一些思路可以参考一下。
ytkah
2022/03/14
5370
opencart3调用三级菜单level 3 sub categories
3分钟短文:说说Laravel模型关联关系最单纯的“一对一”
关系型数据库提供了非常好用的数据关联绑定模式,使用SQL语句可以方便地进行关联数据查询和操作。
程序员小助手
2020/10/12
2K0
3分钟短文:说说Laravel模型关联关系最单纯的“一对一”
ECSHOP学习笔记
1、根目录:前台程序文件 2、admin:后台程序文件夹    --根目录:后台程序文件  *.php文件    --help\zh_cn:各功能的帮助文件 *.xml文件    --images:后台页面用图片    --includes:后台公用文件和函数    --js:后台用js脚本    --styles:后台用样式表    --templates:后台页面模板  *.htm文件 3、api:调用API的系统公用函数 4、cert:存放证书的文件夹 5、data:数据连接设置等,包括各种广告的上传图片等    --afficheimg:首页flash广告图片    --brandlogo:品牌logo 6、images:上传商品图片文件夹,按日期分目录    --200902:按月份划分商品图片    --upload:上传文件夹,包括file、flash、image和media 7、includes:前台公用文件和函数    --codetable:语言对应的代码表    --fckeditor:开源html文本编辑器    --modules\convert:shopex转换文件    --modules\cron:如自动上下架、ip删除等函数    --modules\integrates:整合各种插件和函数基础类    --modules\payment:各种支付接口插件    --modules\shipping:各种送货方式插件 8、install:系统安装文件夹,用后请删除 9、js:前台用js脚本    --calendar:日历控件 10、languages:语言文件    --zh_cn:简体中文语言文件,存储简体中文下使用的函数变量等    --zh_tw:繁体中文语言文件,存储繁体中文下使用的函数变量等 11、temp:存放临时缓存等文件 12、themes:模板文件夹,可以随意拷贝模板样式 13、wap:手机浏览程序    --includes;公用文件和函数    --templates:页面模板  *.wml文件。
Java架构师必看
2021/03/22
7.1K0
TP6.0 一对一模型关联 belongsTo 相对关联(反向关联)
1. 创建数据表 ---- 一对一反向关联使用率很高 附表关联主表称为反向关联,又称为相对关联(tp官方手册这样叫) -- 分类表 CREATE TABLE `category` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` varchar(255) DEFAULT NULL COMMENT '分类名称', `sort` int(11) DEFAULT NULL COMMENT '分类排序', PRIMAR
很酷的站长
2023/02/17
1.1K0
TP6.0 一对一模型关联 belongsTo 相对关联(反向关联)
Laravel之Eloquent ORM
Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。应用Active Record时,每一个类的实例对象唯一对应一个数据库表的一行(一对一关系)。你只需继承一个abstract Active Record 类就可以使用该设计模式访问数据库,其最大的好处是使用非常简单
唐成勇
2019/05/26
2K0
3分钟短文 | Laravel如何改造复杂的多表联合查询,这很高效!
今天我们来说一下laravel框架里最常用的数据库模型操作,特别是功能复杂的应用程序, 往往会拆分出许多的业务表,关联表,在时间和空间上进行权衡。
程序员小助手
2020/08/14
1.2K0
10 关联模型《ThinkPHP6 入门到电商实战》
关联模型指在 tp 中使用模型对多个数据表进行关联。例如一个主账户表与一个账户信息表进行关联,此时两者关联后可以更加简便的进行操作,使代码更加清晰,操作更加简便。
1_bit
2022/10/04
8420
10 关联模型《ThinkPHP6 入门到电商实战》
TP6.0 模型的关联删除
1、在删除文章的同时删除下面的评论 2、 删除用户的同时删除用户的多条评论和多条操作日志
很酷的站长
2023/01/02
8690
TP6.0 模型的关联删除
Laravel5.2之模型关联预加载
说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。
botkenni
2022/01/10
2.6K0
Laravel5.2之模型关联预加载
Laravel5.2之Seeder填充数据小技巧
说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。
botkenni
2022/01/10
3.6K0
Laravel5.2之Seeder填充数据小技巧
【实战】Tp5+小程序(二)--接口编写
ThinkPHP5 从入门到深入学习,结合实战项目深入理解 ThinkPHP5 的特性和使用方法。编写完成简单的基于 RESTFul 接口,实现相应功能,掌握控制器、模型、异常处理、数据校验的使用。
程序小工
2018/09/12
8K0
深入理解 Laravel Eloquent(三)——模型间关系(关联)
Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships
竹清
2018/08/31
2.7K0
(转) Laravel Eloquent 提示和技巧
原文:https://learnku.com/articles/19876#1face4 Eloquent ORM 看起来像一个简单的机制,但在幕后,有很多半隐藏的功能和不太知名的方法来实现更多。在本文中,我将向您展示一些技巧。
mafeifan
2019/03/12
1.6K0
(转) Laravel Eloquent 提示和技巧
【实战】Tp5+小程序(三)--微信登录与令牌
ThinkPHP5 从入门到深入学习,结合实战项目深入理解 ThinkPHP5 的特性和使用方法。深入学习 api 开发,学习微信登录和令牌的相关知识,并理解微信登录流程,完成与微信开放 api 之间的数据交互,完善项目的相应功能。 理解第三方登录授权的 code 和 token 交互过程。
程序小工
2018/09/12
8.7K0
【实战】Tp5+小程序(三)--微信登录与令牌
laravel生成无限级分类
无限级分类是很常见的功能,算法的好坏对于获取分类树的性能起到决定性的作用。尤其当分类数据和层级多时,一个糟糕的算法将使服务器不堪重负
章鱼喵
2019/05/06
2.9K0
laravel生成无限级分类
ThinkPHP6.0学习笔记-模型操作
模型的数据字段和对应的数据表字段是对应的,默认会自动获取(以及类型),自动获取的过程会加一次查询操作(浪费资源),thinkphp支持自定义字段信息。
Mirror王宇阳
2020/11/13
4K0
相关推荐
20 个 Laravel Eloquent 必备的实用技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文