laraval join 的理解

Posted jdsyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laraval join 的理解相关的知识,希望对你有一定的参考价值。

public function join($table, $one, $operator = null, $two = null, $type = ‘inner‘, $where = false)

// If the first "column" of the join is really a Closure instance the developer
// is trying to build a join with a complex "on" clause containing more than
// one condition, so we‘ll add the join and call a Closure with the query.
if ($one instanceof Closure)
$join = new JoinClause($type, $table);
call_user_func($one, $join);
$this->joins[] = $join;
$this->addBinding($join->bindings, ‘join‘);

// If the column is simply a string, we can assume the join simply has a basic
// "on" clause with a single condition. So we will just build the join with
// this simple join clauses attached to it. There is not a join callback.
else
$join = new JoinClause($type, $table);
$this->joins[] = $join->on(
$one, $operator, $two, ‘and‘, $where
);
$this->addBinding($join->bindings, ‘join‘);

return $this;

====DB::table(‘app_a as a‘)
->join(‘app_b as b‘,function($join)
$join->on(‘a.id‘,‘=‘,‘b.goodId‘)
->where(‘b.status‘,‘=‘,‘SUCCESS‘)
->where(‘b.type‘,‘=‘,‘UNLOCK‘);
, null,null,‘left‘)
->where(‘a.id‘,‘>‘,1)
->get();

//相当于
SELECT * FROM app_a as a
LEFT JOIN app_b as b on a.id = b.goodId
and b.status = ‘SUCCESS‘ and b.type = ‘UNLOCK‘
where a.id > 1;


当join不传left时,默认是inner。

以上是关于laraval join 的理解的主要内容,如果未能解决你的问题,请参考以下文章

一文理解 Presto 两种 JOIN 算法实现

c - 无法理解 pthread_join()

SQL----Inner Join Outer JoinCross Join理解

Java多线程中join方法的理解

Python多线程的理解和使用Threading中join()函数的理解

谁能真正理解hash join/nested loop/merge join