Laravel의 leftJoin에서 폐쇄를 사용하면 여러 조건을 지정할 수 있습니다

5843 단어 Laravel
갑자기, 이런 느낌의 SQL을 쓰고 싶으신가요?
-- 家族の情報を全て取得、5歳以下の子供がいればその情報も一緒に
SELECT * FROM families
  INNER JOIN persons 
    ON families.id = persons.family_id
    AND persons.age <= 5;
Laravel의 joinleftJoin 방법, 바로 이런 느낌입니다.
Family::leftJoin('persons', 'families.id', '=', 'persons.family_id')->get();
두 번째 파라미터~4번째 파라미터에는 ON문장의 조건이 있기 때문에 두 번째 나이의 조건을 지정할 수 없습니다
곤란하지만 수첩을 자세히 읽어보니 두 번째 파라미터를 폐합으로 지정할 수 있었다
Family::leftJoin('persons', function ($join) {
    $join->on('families.id', '=', 'persons.family_id')
      ->where('persons.age', '<=', 5)
    })->get();
이렇게 하면 오케이!join의 기능이기 때문에 leftJoin 한정이 아니라 다양한 기능을 사용할 수 있습니다.
join의 코드는 이렇다.
    public function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)
    {
        $join = $this->newJoinClause($this, $type, $table);

        if ($first instanceof Closure) {
            $first($join);

            $this->joins[] = $join;

            $this->addBinding($join->getBindings(), 'join');
        }

        else {
            $method = $where ? 'where' : 'on';

            $this->joins[] = $join->$method($first, $operator, $second);

            $this->addBinding($join->getBindings(), 'join');
        }

        return $this;
    }

좋은 웹페이지 즐겨찾기