2017-10-19 2 views
0
내가 쉘

은 RAW

SELECT * from parent_accounts 
LEFT JOIN child_accounts on parent_accounts.account_id=child_accounts.parent_id 

결과

enter image description here

에서 원시 쿼리를 사용하면 MySQL의 DB 에서 두 테이블을 가입 laravel 쿼리 빌더를 사용하고

에서 diffrent입니다

laravel Query Builder를 사용하는 경우 다음과 같습니다.

$accounts=\DB::table('parent_accounts as p')->join('child_accounts as c','p.account_id','=','c.parent_id')->select('p.name AS parent','c.name as name','c.account_id as account_id','c.parent_id as parent_id')->get(); 

child_accounts가 먼저 left join을 사용하면 4 번째 행을 얻지 못합니다. 당신이 Laravel DB 쿼리 로직 몇 가지 문제가있는 경우

+0

첫 번째 일이, 당신이 정말 설득력 laravel를 사용하지 않는 가입하십시오. 쿼리 작성기를 사용하고 있습니다. 둘 사이에 차이가 있습니다. 모델을 적절히 정의한 다음 laravel eloquent를 사용하십시오. 조인은 단 한 줄로 줄입니다. –

+0

@JunaidAhmad 편집 게시물 – JenuRudan

+0

다시는 질의 빌더를 사용하지 않거나 설득력이 없다면 사용하지 마십시오. –

답변

0

당신이 원시 SQL requests을 수행하거나 예를 들어 this
처럼 간단 버전을 사용할 수 있습니다 :

$accounts= \DB::select(\DB::raw(" 
      SELECT * from parent_accounts 
      LEFT JOIN child_accounts on 
      parent_accounts.account_id=child_accounts.parent_id"); 

하지만 정말 문제입니다 이해하려면, DB 쿼리를 SQL로 변환하고 요청 사항이 동일한 지 확인하는 것이 좋습니다. More here.
TLDR;
검색어 끝에 ->toSql()을 간단히 추가하고 출력을 읽으십시오. laravel 쿼리를 SQL 버전과 동일하게 변환하십시오.

1

예를 들어, 가입 당신이 왼쪽을하고 있기 때문에 당신의 SQL 쿼리 방법 leftJoin() 쿼리 빌더의를 사용하려고 : 첫째

$accounts= DB::table('parent_accounts as p') 
       ->leftJoin('child_accounts as c','p.account_id','=','c.parent_id') 
       ->select('p.name AS parent','c.name as name','c.account_id as account_id','c.parent_id as parent_id') 
       ->get();