关于关联查询,官方文档是这样描述的:
关联查询
上面的join函数需要三个参数,分别是:
加入
关联的(完整)表名和别名支持三种写法:
写法一:['全表名或子查询'=>'别名'] 写法二:'完整表名别名' 写法三:'不带数据表前缀的表名'
关联条件,可以是字符串,也可以是数组,每个元素为数组时就是一个关联条件。
类型
关联类型,可以是:INNER、LEFT、RIGHT、FULL,不区分大小写,默认为 INNER。
将具有不同前缀的表关联起来
一般来说,都是在数据库中查询。 这种情况下,默认使用相同的表前缀,如(shop_),所以在使用数据库模型关联查询时,往往会这样写:
Order::alias('o') ->join('user u', 'o.user_id = u.id') ->select();
上面代码中,因为使用了模型查询,所以默认添加表前缀,两个表的全表名是and,关联类型默认为INNER关联。
但此时如果关联的是不同前缀的表(例如: ),上面的查询语句显然就不行了。 在这种情况下,需要对相关语句进行轻微修改。 修改后的代码如下:
Order::alias('o') ->join(['pay_record' => 'r'], 'o.pay_id = r.id') ->select();
这样就可以利用该模型关联不同前缀的表进行查询。
总结
上面的方法实际上是将join函数中的join参数从字符串改为数组; 它是一个优秀的开发框架,上面的连接方式只是其中一种。 更多方法请参考官方手册。