はRAW

2017-10-19 22 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 から2つのテーブルを結合するためにlaravelクエリビルダを使用してい

から切り抜いたです

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との最初の結合を使用した場合、私は4番目の行を得ることはない、その結果ではない?あなたはLaravel DB照会ロジックを持ついくつかの問題がある場合は

+0

まず第一に、物事、あなたが本当に雄弁laravelを使用していません参加のために。クエリビルダを使用しています。両方の違いがあります。モデルを適切に定義し、laravel eloquentを使用してください。ジョインを1行に減らします。 –

+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

方法leftJoinを(使用してみてください)、クエリビルダの、あなたのSQLクエリで使用すると、LEFTをやっているので、例えば、登録しよう:

$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();