乐趣区

关于php:ThinkPHP-的join关联查询不使用默认的表前缀

对于 ThinkPHP 的关联查问,官网文档是这样形容的:

上述 join 函数中须要三个参数,别离是:

join

要关联的(残缺)表名以及别名,反对三种写法:

写法 1:['残缺表名或者子查问'=>'别名']
写法 2:'残缺表名 别名'
写法 3:'不带数据表前缀的表名'

condition

关联条件,能够为字符串或数组,为数组时每一个元素都是一个关联条件。

type

关联类型,能够为: INNER、LEFT、RIGHT、FULL,不辨别大小写,默认为 INNER。

不同前缀

个别状况下,都是一个数据库中查问的,这样的状况下默认应用的都是 雷同的表前缀,比方(shop_),所以在应用 数据库模型 关联查问时往往都是这样写的:

Order::alias('o')
     ->join('user u', 'o.user_id = u.id')
     ->select();

在以上代码中,因为是应用模型查问,所以默认都会加上表前缀,两张表的残缺表名就是 shop_ordershop_user,而关联类型则默认为 INNER 关联。

但这时如果关联了一张 不同前缀的表(比方:pay_record),上述的查问语句显然就行不通了,这时就须要在关联语句处稍作批改,批改后的代码如下:

Order::alias('o')
     ->join(['pay_record' => 'r'], 'o.pay_id = r.id')
     ->select();

这样便能应用模型关联不同前缀的表进行查问了。

总结

上述的形式其实也就是 把 join 函数中的 join 参数由字符串批改为数组;ThinkPHP 是一个很优良的开发框架,上述的关联形式也只是其中一种,更多形式能够查阅官网手册:ThinkPHP 官网手册。

退出移动版