快速开发指南 - ginkgo


join()

JOIN 通常有下面几种类型,不同类型的 JOIN 操作会影响返回的数据结果。

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

join() 方法说明:

function join( $join [, $condition = '' [, $type = 'INNER' ]] )

join() 方法也是链式操作之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

参数

  • join 关联

    支持两种类型:字符串、数组,为数组时表示批量 JOIN

  • condition 条件

    join 为数组时自动忽略。

    支持两种类型:字符串、数组

  • type 关联类型

    join 为数组时自动忽略。

    可以为:INNER (默认)、LEFT、RIGHT、FULL,不区分大小写。

举例,以下三种写法的效果一样

$select = array(
  array('work', 'id'),
  array('artist', 'artist_id'),
);

Db::table('artist')
  ->join('work', 'artist.id = work.artist_id')
  ->select($select);

$join = array('artist.id', '=', 'work.artist_id');
Db::table('artist')
  ->join($join)
  ->select($select);

$join = array('work', 'artist.id = work.artist_id', 'RIGHT');

Db::table('artist')
  ->join($join)
  ->select($select);

如果要关联多个表,可以这样写:

$join = array(
  array('work', 'artist.id = work.artist_id', 'LEFT'),
  array('card', 'card.id = work.card_id', 'LEFT'),
);

Db::table('artist')
  ->join($join)
  ->select($select);

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

Db::table('artist')
  ->join('work', 'artist.id = work.artist_id', 'RIGHT')
  ->select($select);

$join = array('artist.id', '=', 'work.artist_id', 'RIGHT');
Db::table('artist')
  ->join($join)
  ->select($select);

更新时间 10-15 13:25
Top