2017-10-19 110 views
0

我使用laravel查询生成器从MySQL数据库 连接两个表,当我在外壳Laravel查询生成器加入为RAW

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

结果

enter image description here

使用原始查询不同势

当使用laravel查询Builderas如下

$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不是结果?

+0

首先第一件事情,你是真的不使用laravel口若悬河加入。您正在使用查询生成器。两者之间有区别。尝试正确定义模型,然后使用laravel雄辩。它将减少连接到只有一条线。 –

+0

@JunaidAhmad编辑帖子 – JenuRudan

+0

再次不使用查询生成器直到或除非用eloquents不可能。 –

回答

0

如果你有一些问题Laravel DB查询逻辑可以执行原始的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"); 

但是,如果你真的想明白的地方是你的问题,我建议你将你的数据库查询转换为sql,看看你的请求是否相同。更多here
TLDR;
只需在查询结尾处添加->toSql()并读取输出即可。比将你的laravel查询转换为与SQL版本相同。

1

尝试使用方法leftJoin()查询生成器的,因为在你的SQL查询你正在做一个LEFT JOIN,例如:

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