Laravel left join携带多个条件

在laravel中使用leftJoin添加多个条件时,如select a.* from a left join b on = and b.status = 1这种类似sql,发现框架自身封装的leftJoin不支持多个参数传递(当然可用写原生sql),laravel框架自身封装的leftJoin方法如下:

 public function leftJoin($table, $first, $operator = null, $second = null)
    return $this->join($table, $first, $operator, $second, 'left');

 浏览下 \vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php文件,发现join方法可用实现自己想要的left join携带多参数。laravel自身的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){
}, null,null,'left')

SELECT * FROM app_a as a 
LEFT JOIN app_b as b on = b.goodId 
and b.status = 'SUCCESS' and b.type = 'UNLOCK' 
where > 1;


posted @ 2020-02-11 09:23  冰狼爱魔  阅读(7992)  评论(0编辑  收藏  举报