反向关联(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 反向关联相关推荐

  1. Django model反向关联名称的方法(转)

    原文:https://www.jb51.net/article/152825.htm 转载于:https://www.cnblogs.com/olivertian/p/11150084.html

  2. mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...

    之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...

  3. 二十七、PHP框架Laravel学习笔记——模型的多对多关联

    二.多对多关联 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张: (1) .users:用户表: (2) .roles:权限表: (3) .role_user:中间表:默认表名,user_i ...

  4. 二十六、PHP框架Laravel学习笔记——模型的一对多关联

    二.一对多关联 一对多关联,本质上使用方法和一对一关联类似,内部实现略有不同: 创建另一个模型:book.php,我们看下这个表数据: PS:这里 user_id=19 有三个,也就是蜡笔小新有三本书 ...

  5. 二十五、PHP框架Laravel学习笔记——模型的一对一关联

    一.关联概念 关联模型,即:两张或以上的表进行一定规则的绑定关联: 比如:一个学生(学生表)对应一张个人信息卡(信息表),这种就是一对一: 再比如:一篇博文(帖子表)对应多个评论(评论表),这种就是一 ...

  6. Laravel源码分析之模型关联

    上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的 ...

  7. Laravel核心解读--Database(四) 模型关联

    Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对 ...

  8. CoreData 从入门到精通(三)关联表的创建

    上篇博客中讲了 CoreData 里增删改查的使用,学到这里已经可以应对简单的数据存储需求了.但是当数据模型复杂起来时,例如你的模型类中除了要存储 CoreData 里支持的数据类型外,还有一些自定义 ...

  9. 【Laravel笔记】10. 模型的关联查询

    关于 拾年之璐 微信公众号:知行校园汇,点击查看,欢迎关注 其他平台(点击蓝字可访问): GitHub | Gitee | 哔哩哔哩 | 语雀 | 简书 | 微信小程序 | 知行达摩院 本文专栏:La ...

最新文章

  1. 粤港澳大湾区菜篮子-农业大健康·林裕豪:从玉谋定功能产业
  2. django mysql debug_部署前准备--使用Mysql之Django Debug Toolbar安装以及配置
  3. mybatis实现多对多
  4. linux telnet.class,Linux telnet简单实用方法
  5. 【LeetCode】剑指 Offer 10- II. 青蛙跳台阶问题
  6. PowerDesign介绍与使用
  7. activity多实例任务节点审批
  8. 常用adb命令学习:查看和修改设备的输入法
  9. 帝国 cms 列表 php,常用帝国cms目录结构分享
  10. 【每日一读】Pro-GNN:Graph Structure Learning for Robust Graph Neural Networks
  11. jmeter之CSV 数据文件设置
  12. windows域名解析服务器地址,Win10打开提示无法解析服务器DNS如何解决
  13. 怎么给PDF删除其中一页,PDF删除其中一页的方法
  14. 怎么在html的表格中加筛选,excel中表头合并单元格的筛选
  15. Android 一款十分简洁、优雅的日记APP
  16. 如何变更Win10系统电脑的锁屏壁纸?分享经验!怎样选择Win10电脑的锁屏壁纸?
  17. 复杂网络-标准公开数据集
  18. 张艾迪(创始人):工作23小时
  19. 谷歌应用商店现木马程序、百万WiFi路由器面临漏洞风险|12月6日全球网络安全热点
  20. linux移动硬盘hd0,u盘/移动硬盘(usb hd)安装多种linux live CD

热门文章

  1. C语言实现itoa函数【精简】
  2. 对于程序员和架构师来说最重要的事【小结】
  3. 【Anki】在Ankidroid上显示数学公式
  4. C语言进阶-ifndef的用法
  5. 【Python】pycharm ctrl shift f 失效
  6. ChatGPT Prompt工程浅谈
  7. 学Python很枯燥怎么办
  8. Web前端面试题目及答案汇总
  9. onchange比ajax触发快,Ajax后onchange
  10. 网上比较好的两种作息时间表