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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在定义adt时_ScriptableObject

    在定义adt时_ScriptableObjectADT操作分类Creators构造器:利用其他的数据类型对象产生一个新的对象可能实现为构造函数或静态工厂方法Producers生产器:用已有该类型对象产生新对象如string.concat()(连接两个字符串,产生一个新的字符串)Observers观察器如list.size()返回int(不同于原类型)Mutators变值器(改变对象属性的方法)通常范围void,如果返回void,则必然意味着它改变了某些对象的内部状态,也可能范围非空类型(如容器类的put、add方法)…

    2025年9月4日
    5
  • Codeforces Round #243 (Div. 2) Problem B – Sereja and Mirroring 解读

    Codeforces Round #243 (Div. 2) Problem B – Sereja and Mirroring 解读

    2022年1月7日
    46
  • Linux下ARM开发环境搭建

    Linux下ARM开发环境搭建本人的系统环境:Linuxubuntu3.8.0-35-generic#50-UbuntuSMPTueDec301:25:33UTC2013i686i686i686GNU/Linux1、安装skyeyesudoapt-getinstallskyeyeskyeye-h可以看到skyeye的版本号为1.2.5也可以到http

    2022年5月8日
    44
  • python批量执行sql语句_python jdbc

    python批量执行sql语句_python jdbc一、前言在开发的过程中,总希望方法执行完了可以看到完整是sql语句,从而判断执行的是否正确,所以就希望有一个可以打印sql语句的插件。p6spy就是一款针对数据库访问操作的动态监控框架,他可以和数据库无缝截取和操纵,而不必对现有应该用程序的代码做任何修改。通过p6spy可以直接打印数据库执行的语句,下面向大家介绍一下p6spy。二、使用p6spy,需要什么?p6spy的ja…

    2022年9月1日
    7
  • 计算机最炫民族风教案,辽师大版信息技术四下第一单元第6课《最炫民族风》教案7.docx…[通俗易懂]

    计算机最炫民族风教案,辽师大版信息技术四下第一单元第6课《最炫民族风》教案7.docx…[通俗易懂]辽师大版信息技术四下第一单元第6课《最炫民族风》教案7.docx文档编号:536850文档页数:5上传时间:2019-01-13文档级别:文档类型:docx文档大小:7.00MB课课题题美丽的辽宁我的家美丽的辽宁我的家–WordWord软件的简单应用软件的简单应用66、、最炫民族风最炫民族风教学目标教学目标1、学会结合文章的内容进行分栏;2、学会设置页面颜色与页面效果;3、…

    2022年9月22日
    2
  • QT之计算器核心解析算法(十)

    QT之计算器核心解析算法(十)

    2022年3月13日
    38

发表回复

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

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