[英]Laravel Query Builder Join is diffrent from RAW
当我在外壳中使用原始查询时,我正在使用laravel查询生成器从mysql db连接两个表
SELECT * from parent_accounts
LEFT JOIN child_accounts on parent_accounts.account_id=child_accounts.parent_id
结果
当使用laravel查询生成器时如下
$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();
我从不进入第4行,如果我先使用child_accounts左联接,那不是结果吗?
尝试使用查询生成器的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();
如果您对Laravel DB查询逻辑有疑问,可以执行原始sql 请求或使用像这样的简单版本
例如:
$accounts= \DB::select(\DB::raw("
SELECT * from parent_accounts
LEFT JOIN child_accounts on
parent_accounts.account_id=child_accounts.parent_id");
但是,如果您真的想了解问题出在哪里,我建议您将数据库查询转换为sql并查看您的请求是否相同。 这里更多。
TLDR;
只需在查询末尾添加->toSql()
并读取输出。 比将您的laravel查询转换为与SQL版本相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.