联表
更新时间:2024年11月4日 07:45
浏览:886
表模型 提供了以下几种常用的联表操作
- leftJoin - 左联接
- rightJoin - 右联接
- innerJoin / join - 内联接
- fullJoin - 全联接
- crossJoin - 交叉联接
leftJoin 左联接
public function leftJoin(string $table, string $on): Table
参数:
- string $table - 表名
- string $on - 联接条件
返回值:
-
Table - 表模型本身
代码示例:
Be::getTable('user')
->leftJoin('user_role', 'user.role_id = user_role.id')
->getObjects('user.id, user.name, user_role.name AS role_name');
以左表(user)记录为主,右表(user_role)匹配不上的赋 null 值
rightJoin 右联接
public function rightJoin(string $table, string $on): Table
参数:
- string $table - 表名
- string $on - 联接条件
返回值:
-
Table - 表模型本身
代码示例:
Be::getTable('user')
->rightJoin('user_role', 'user.role_id = user_role.id')
->getObjects('user.id, user.name, user_role.name AS role_name');
以右表(user_role)记录为主,左表(user)匹配不上的赋 null 值
innerJoin / join 内联接
public function innerJoin(string $table, string $on): Table
public function join(string $table, string $on): Table
参数:
- string $table - 表名
- string $on - 联接条件
返回值:
-
Table - 表模型本身
join 是 innerJoin 的简写函数,返回左右表都存在的行。
代码示例:
Be::getTable('user')
->innerJoin('user_role', 'user.role_id = user_role.id')
->getObjects('user.id, user.name, user_role.name AS role_name');
fullJoin 全联接
public function fullJoin(string $table, string $on): Table
参数:
- string $table - 表名
- string $on - 联接条件
返回值:
-
Table - 表模型本身
左表或右表中存在即返回该行,MySQL 不支持。MSSQL 和 Oracle 下有效。
代码示例:
Be::getTable('user')
->fullJoin('user_role', 'user.role_id = user_role.id')
->getObjects('user.id, user.name, user_role.name AS role_name');
crossJoin 交叉联接
public function crossJoin(string $table, string $on): Table
参数:
- string $table - 表名
- string $on - 联接条件
返回值:
-
Table - 表模型本身
交叉联接是笛卡尔积,MySQL 不支持。MSSQL 和 Oracle 下有效。
代码示例:
Be::getTable('user')
->crossJoin('user_role', 'user.role_id = user_role.id')
->getObjects('user.id, user.name, user_role.name AS role_name');