<记录>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();
}
嵌套关联

/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表中建立关联
<记录>TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)的更多相关文章
- TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)
在数据库设计中,常常会有如下这种关联模型,分类表中一条分类对应多个商品表中的商品 如果要获得分类表中每条分类 以及 对应的商品的信息,则需要先查询分类表中的数据,然后根据结果遍历查询商品表,最后把数据 ...
- 说说CakePHP的关联模型之一 基本关联
一个无论多么复杂的程序,拆开看无非是三种逻辑结构的组合:顺序结构.条件结构和循环结构. 类似的,数据库中表与表的之间的关联无外乎四种:一对一.一对多.多对一和多对多. CakePHP的模型层中定义了四 ...
- ThinkPHP第十五天(setField、setInc、setDec、关联模型)
1.ThinkPHP中的比较特殊连贯操作 如果要更新某个字段可以用setField方法,比如M('user')->where('id=1')->setField('username','T ...
- ThinkPHP第十四天(显示TRACE界面配置,关联模型详解定义)
1.显示TRACE界面,首选需要在显示模版界面,$this->display(),然后需要在配置文件中配置 SHOW_PAGE_TRACE => true 2.关联模型使用 主表以user ...
- ThinkPHP 关联模型(二十)
原文:ThinkPHP 关联模型(二十) ThinkPHP关联模型 两表关联查询:Message 和 user 关联条件uid(参考手册:模型->关联模型) 步骤: 一:创建Message表 ...
- Thinkphp 关联模型
1.定义关联模型 2.使用关联模型 D('BlogRelation')->relation(true)->add($data);
- 关联模型中如果condition条件
在练习中,有一个user表和地址表,一对多的关系. 我的想法是,通过这个关联模型找出这个用户下面默认值字段为1的地址 控制器中 public function index(){ $User = D(' ...
- 实例讲解TP5中关联模型
https://blog.csdn.net/github_37512301/article/details/75675054 一.关联模型在关系型数据库中,表之间有一对一.一对多.多对多的关系.在 T ...
- TP5一对一、一对多关联模型的使用
文章表SQL CREATE TABLE `tp_article` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `title` varc ...
随机推荐
- 基于Verilog的串口发送程序
一.模块框图及基本思路 tx_bps_module:波特率时钟产生模块 tx_control_module:串口发送的核心控制模块 tx_module:前两个模块的组合 control_module: ...
- idea中文输入法无提示问题的解决
中文输入法无提示问题的解决 双击Shift键打开Search Everywhere,输入Switch Boot JDK,选择 Switch IDE boot JDK...菜单,然后点击...设置Ora ...
- leetcode题解 200. Number of Islands(其实就是一个深搜)
题目: Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is s ...
- 【webdriver自动化】Python数据驱动工具DDT
一.Python数据驱动工具ddt 1. 安装 ddt pip install ddt DDT是 “Data-Driven Tests”的缩写 资料:http://ddt.readthedocs.i ...
- Dilated Convolutions 空洞卷积
Dilated Convolutions,中文一般称为空洞卷积或者扩张卷积,是一种改进的图像卷积方法. 扩张卷积工作示意图如下: 图a是普通的卷积,感受野是3*3,相当于扩充dilation=0 图b ...
- Python全栈之路----函数----嵌套函数
函数内部可以再次定义函数 要执行函数,必须调用 def func1(): print('alex') def func2(): print('eric') func2() #如果没有这一句,不会pri ...
- hibernate多对多关系
package com.manytomany; import java.util.HashSet; import java.util.Set; public class Student { priva ...
- python------SocketServer (0809)
socket(一对一) 与socketserver 一.socketserver 1. 正式定义:The socketserver module simplifies the task of writ ...
- 【python接口自动化-requests库】【三】优化重构requests方法
一.重构post请求方法 上一张讲了如何使用requests库发送post请求,但是有时候,我们写脚本,不可能这么简单,代码完全不可复用,重复工作,那我们是不是可以想象,把我们的get,post请求, ...
- EBS打补丁参考
EBS Application打补丁参考:http://blog.csdn.net/cunxiyuan108/article/details/6009784 整体步骤: 0. 停止应用(注意确认FND ...