[英]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.