1.一对一关联

一个用户对应的表里只能有一条数据,例如:一个用户(user)只能有一个用户信息(user_profile)

1.hasOne/belongsTo
  • 1.在模型定义方法(方法名为userProfile),用例如下,但是!!!两者的区别是hasOne第一个值写的是关联表BelongsTo第一个写的主表(第二个参数在自己的表里面用belongsTo,不在就要用hasOne

  • 2.控制器中使用–user是在模型中定义的方法名–nickname是关联模型的属性(表的字段)

  • 3.关联更新,适用于订单表与订单详情表–这个非常好用!!!

2.with
  • 1.关联预载入,减少数据库压力,前后端分离一定用with

如果这样查询,需要查询四次–主表查一次副表查三次

如果加上with,只会查询两次–主表一次副表一次,大大减少查询压力

  • 2.关联预载入可以嵌套,查询子模型的子模型,支持查多个–profile的子模型是phone模型等

  • 关联预载入的两种方式–in与join

in是两次查询(sql如下),join是一次查询(sql如下),默认都是in查询,传1

join的用法–控制器层

join生成的sql如下

复制代码
  1. "SELECT `user`.`id`,userSubscribe.id AS userSubscribe__id,userSubscribe.user_id AS userSubscribe__user_id,userSubscribe.subscribe_num AS userSubscribe__subscribe_num FROM `fa_user` `user` INNER JOIN `fa_user_subscribe` `userSubscribe` ON `user`.`id`=`userSubscribe`.`user_id` WHERE `user`.`id` = 1"

in的用法–控制器层

in生成的sql如下

//第一次查询–查询主表

复制代码
  1. SELECT * FROM `fa_user` WHERE `id` = 1

//第二次查询–查询分表

复制代码
  1. SELECT * FROM `fa_user_subscribe` WHERE `user_id` IN (1)