联表查询
join()
可以将多个表关联起来查询, 一步到位减少多次调用的逻辑
- @param
tableName
关联的表名 - @param
whereStr
关联条件 - @param
type
关联类型 可以为 INNER, LEFT, RIGHT, FULL 默认为LEFT INNER
: 如果表中有至少一个匹配,则返回行LEFT
: 即使右表中没有匹配,也从左表返回所有的行RIGHT
: 即使左表中没有匹配,也从右表返回所有的行FULL
: 只要其中一个表中存在匹配,就返回行
更详细的讲解请看这篇文章
两个表关联
Db('user').join('role', 'user.id = role.user_id').where('user.id', 1).select()
Db('user').join('role', 'user.id = role.user_id').where('user.id', 1).select()
最终的SQL语句为:
SELECT * FROM user LEFT JOIN role ON user.id = role.user_id WHERE user.id = 1
SELECT * FROM user LEFT JOIN role ON user.id = role.user_id WHERE user.id = 1
三个表关联
Db('user')
.join('role', 'user.id = role.user_id')
.join('auth', 'role.id = auth.role_id')
.where('user.id', 1).select()
Db('user')
.join('role', 'user.id = role.user_id')
.join('auth', 'role.id = auth.role_id')
.where('user.id', 1).select()
最终的SQL语句为:
SELECT * FROM user
LEFT JOIN role ON user.id = role.user_id
LEFT JOIN auth ON role.id = auth.role_id
WHERE user.id = 1
SELECT * FROM user
LEFT JOIN role ON user.id = role.user_id
LEFT JOIN auth ON role.id = auth.role_id
WHERE user.id = 1