繁体   English   中英

Laravel 5:本机SQL查询生成器

[英]Laravel 5: Native SQL to Query Builder

我试图在Laravel 5上加入2个表,并且必须使用查询生成器。 我已经有了它的SQL,但是我无法将其转换为查询生成器语法。 SQL在下面

SELECT v.id, r.full_name, b.full_name, s.full_name
FROM vehicles v
LEFT JOIN clients r ON v.representive_client_id = r.id
LEFT JOIN clients b ON v.buyer_client_id = b.id
LEFT JOIN clients s ON v.seller_client_id = s.id

我尝试的是

    $query_result = DB::table('vehicles')   
                    ->selectRaw($query)
                    ->leftJoin('clients', 'vehicles.representive_client_id', '=', 'clients.id')
                    ->leftJoin('clients', 'vehicles.buyer_client_id ', '=', 'clients.id')
                    ->leftJoin('clients', 'vehicles.seller_client_id ', '=', 'clients.id')
                    ->paginate(30);

问题是我不知道如何使用AS caluse用于查询生成器,因为我需要以检索3种不同类型的full_name从列vehicles table.Anybody可以帮助我了解如何把它写在一个适当的查询生成器的语法? 任何帮助,将不胜感激。

您可以将别名与选择的列和表以及联接一起使用,因为查询生成器会知道正确引用它们。 因此,您可以做到这一点而没有任何问题:

$query_result = DB::table('vehicles v')   
                ->select('v.id', 'r.full_name as r_name', 'b.full_name as b_name', 's.full_name as s_name')
                ->leftJoin('clients r', 'vehicles.representive_client_id', '=', 'r.id')
                ->leftJoin('clients b', 'vehicles.buyer_client_id ', '=', 'b.id')
                ->leftJoin('clients s', 'vehicles.seller_client_id ', '=', 's.id')
                ->paginate(30);

当然,您可以为选定的列使用所需的任何别名。 实际上,“ 查询生成器选择文档”中的示例之一使用别名: email as user_email


要检查由查询生成器生成的SQL查询,可以使用toSql方法。 因此,在您的情况下,可以使用->toSql()而不是->paginate(30)来返回带有查询生成器生成的SQL的字符串,您可以将其与原始查询进行比较,看看是否匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM