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

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

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

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

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

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

普通关联

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

在分类表中创建关联

namespace app\common\model; class Category extends Base { public function goods(){ return $this->hasMany('Goods','category_id','id'); } }

 

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

    public function list(){ return CategoryModel::with('goods')->where(true)->select(); }

 

 嵌套关联

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

 

 /application/common/model/Category.php

class Category extends Model { public function product(){ return $this->hasMany('product','category_id','id'); } }

 

 /application/common/model/Goods.php

class Product extends Model { public function property(){ return $this->hasMany('property','goods_id','id'); } }

 

在控制器中调用:

    public function index() { return Category::with('product,product.property')->where('id',1)->find(); }

 

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

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表中可以建立外键

public function profile(){ return $this->hasOne('profile','user_id','id'); }

 

也可以在Profile表中建立

public function user(){ return $this->belongsTo('user','user_id','id'); }

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle 视图索引

    Oracle 视图索引第五章视图索引的操作5.1视图的功能一个视图实际上就是封装了一条复杂的查询语句注:为了在当前用户模式中创建视图,要求数据库用户必须有createanyview(创建任何视图)的权限。5.2创建视图的语法create[orreplace]view视图名称as查询语句例:建立一个视图,包含全部部门编号为20的部门的雇员信息(雇员编号,姓名,工作,部门编号)createview…

    2022年7月22日
    11
  • JAVA设计模式之原型模式

    定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在ja

    2022年3月11日
    43
  • Idea激活码最新教程2022.2.1版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2022.2.1版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2022 2 1 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2022 2 1 成功激活

    2025年5月25日
    5
  • 语音合成的思路、语音的声学特征、声音采样的一些资料

    语音合成的思路、语音的声学特征、声音采样的一些资料语音合成:把语音波形文件重现,以一种灵活的方式,只用极少数的基础数据,比如元音辅音的语音参数,那么首先需要研究元音辅音的语音学性质。先从元音开始,根据相关资料,不同的元音是由相同的原始声带音通过不同的共振腔(由声腔形状的变化决定)产生不同的共振效果,导致其频谱发生很大变化而得以区分。一般来说每个频谱都有三个振幅比较强的频率区,在频谱上呈现为波峰状,称为“共振峰”(formant),从低频到高频

    2022年6月26日
    40
  • 人物关系图谱插件

    人物关系图谱插件<template><div><divstyle=”height:calc(100vh-50px);”><RelationGraphref=”seeksRelationGraph”:options=”graphOptions”:on-node-click=”onNodeClick”:on-line-click=”onLineClick”/></div>…

    2022年6月26日
    50
  • godaddy域名服务器_自己有域名怎么建网站

    godaddy域名服务器_自己有域名怎么建网站自己准备做一个个人网站,由于第一次做所以遇到了各种困难,现在把自己的一些经历经验贴出来供大家参考。此贴针对一个完全没有经验的菜鸟,大牛勿喷。个人搭建一个网站首先要考虑的是网址(域名),然后是你的文件放到哪里(空间)。最后将域名解析后,绑定到空间则网站搭建完成就可以访问。网上关于网站搭建的技术贴有很多,但由于岁月年长有些方法或步骤可能不适用,在这里通过一次个人经历,给大家提供一些经验。一般域

    2022年10月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号