yii2 inverseOf 反向关联
反向关联(Inverse Relations)
两个 Active Record 类之间的关联声明往往是相互关联的。例如,Customer 是
通过 orders 关联到 Order ,而Order 通过 customer 又关联回到了 Customer。
class Customer extends ActiveRecord
{public function getOrders(){return $this->hasMany(Order::className(), ['customer_id' => 'id']);}
}class Order extends ActiveRecord
{public function getCustomer(){return $this->hasOne(Customer::className(), ['id' => 'customer_id']);}
}
现在考虑下面的一段代码:
// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);// SELECT * FROM `order` WHERE `customer_id` = 123
$order = $customer->orders[0];// SELECT * FROM `customer` WHERE `id` = 123
$customer2 = $order->customer;// 显示 "not the same"
echo $customer2 === $customer ? 'same' : 'not the same';
我们原本认为 $customer 和 $customer2 是一样的,但不是!其实他们确实包含相同的
客户数据,但它们是不同的对象。 访问 $order->customer 时,需要执行额外的 SQL 语句,
以填充出一个新对象 $customer2。
为了避免上述例子中最后一个 SQL 语句被冗余执行,我们应该告诉 Yii
customer 是 orders 的 反向关联,可以通过调用 inverseOf() 方法声明,
如下所示:
class Customer extends ActiveRecord
{public function getOrders(){return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer');}
}
这样修改关联声明后:
// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);// SELECT * FROM `order` WHERE `customer_id` = 123
$order = $customer->orders[0];// No SQL will be executed
$customer2 = $order->customer;// 输出 "same"
echo $customer2 === $customer ? 'same' : 'not the same';
yii2 inverseOf 反向关联相关推荐
- Django model反向关联名称的方法(转)
原文:https://www.jb51.net/article/152825.htm 转载于:https://www.cnblogs.com/olivertian/p/11150084.html
- mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...
之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...
- 二十七、PHP框架Laravel学习笔记——模型的多对多关联
二.多对多关联 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张: (1) .users:用户表: (2) .roles:权限表: (3) .role_user:中间表:默认表名,user_i ...
- 二十六、PHP框架Laravel学习笔记——模型的一对多关联
二.一对多关联 一对多关联,本质上使用方法和一对一关联类似,内部实现略有不同: 创建另一个模型:book.php,我们看下这个表数据: PS:这里 user_id=19 有三个,也就是蜡笔小新有三本书 ...
- 二十五、PHP框架Laravel学习笔记——模型的一对一关联
一.关联概念 关联模型,即:两张或以上的表进行一定规则的绑定关联: 比如:一个学生(学生表)对应一张个人信息卡(信息表),这种就是一对一: 再比如:一篇博文(帖子表)对应多个评论(评论表),这种就是一 ...
- Laravel源码分析之模型关联
上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的 ...
- Laravel核心解读--Database(四) 模型关联
Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对 ...
- CoreData 从入门到精通(三)关联表的创建
上篇博客中讲了 CoreData 里增删改查的使用,学到这里已经可以应对简单的数据存储需求了.但是当数据模型复杂起来时,例如你的模型类中除了要存储 CoreData 里支持的数据类型外,还有一些自定义 ...
- 【Laravel笔记】10. 模型的关联查询
关于 拾年之璐 微信公众号:知行校园汇,点击查看,欢迎关注 其他平台(点击蓝字可访问): GitHub | Gitee | 哔哩哔哩 | 语雀 | 简书 | 微信小程序 | 知行达摩院 本文专栏:La ...
最新文章
- 粤港澳大湾区菜篮子-农业大健康·林裕豪:从玉谋定功能产业
- django mysql debug_部署前准备--使用Mysql之Django Debug Toolbar安装以及配置
- mybatis实现多对多
- linux telnet.class,Linux telnet简单实用方法
- 【LeetCode】剑指 Offer 10- II. 青蛙跳台阶问题
- PowerDesign介绍与使用
- activity多实例任务节点审批
- 常用adb命令学习:查看和修改设备的输入法
- 帝国 cms 列表 php,常用帝国cms目录结构分享
- 【每日一读】Pro-GNN:Graph Structure Learning for Robust Graph Neural Networks
- jmeter之CSV 数据文件设置
- windows域名解析服务器地址,Win10打开提示无法解析服务器DNS如何解决
- 怎么给PDF删除其中一页,PDF删除其中一页的方法
- 怎么在html的表格中加筛选,excel中表头合并单元格的筛选
- Android 一款十分简洁、优雅的日记APP
- 如何变更Win10系统电脑的锁屏壁纸?分享经验!怎样选择Win10电脑的锁屏壁纸?
- 复杂网络-标准公开数据集
- 张艾迪(创始人):工作23小时
- 谷歌应用商店现木马程序、百万WiFi路由器面临漏洞风险|12月6日全球网络安全热点
- linux移动硬盘hd0,u盘/移动硬盘(usb hd)安装多种linux live CD