勾股OA在线文档

alias 与 join

alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
JOIN方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。

INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

说明

join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] )
leftJoin ( mixed join [, mixed $condition = null ] )
rightJoin ( mixed join [, mixed $condition = null ] )
fullJoin ( mixed join [, mixed $condition = null ] )

参数

join要关联的(完整)表名以及别名
支持的写法:

写法1:[ '完整表名或者子查询'=>'别名' ]
写法2:'不带数据表前缀的表名'(自动作为别名)
写法2:'不带数据表前缀的表名 别名'

condition,关联条件,只能是字符串。
type,关联类型。可以为:INNERLEFTRIGHTFULL,不区分大小写,默认为INNER

举例

Db::name('Admin')
->alias('a')
->join('work w','a.id = w.artist_id')
->join('card c','a.card_id = c.id')
->select();
Db::name('Admin')
->alias('a')
->join(['work'=>'w'],'a.id=w.artist_id')
->join(['card'=>'c'],'a.card_id=c.id')
->select();

默认采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成

Db::name('Admin')
->alias('a')
->leftJoin('word w','a.id = w.artist_id')
->select();

表名也可以是一个子查询

$subsql = Db::name('work')
->where('status',1)
->field('artist_id,count(id) count')
->group('artist_id')
->buildSql();

Db::name('Admin')
->alias('a')
->join([$subsql=> 'w'], 'a.artist_id = w.artist_id')
->select();

其他查询:

// 使用table方法打开数据表,并设置别名
$userModel = app('userModel');
$user = $userModel->alias('u')
    ->join('profile p', 'u.id = p.user_id')
    ->where('u.id', 1)
    ->field('u.*, p.mobile, p.address')
    ->find();