Laravel 5:原生SQL查询生成器
问题描述:
我想在Laravel 5上连接2个表,并且必须使用查询生成器。我已经得到了它的SQL,但我无法将其转换为查询生成器语法。 SQL低于Laravel 5:原生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用于查询生成器,因为我需要从vehicles
表retrive 3种不同类型full_name
列任何人都可以帮助我解释如何用正确的查询生成器语法编写它。任何帮助,将不胜感激。
答
您可以在选择列和表以及连接时使用别名,因为查询生成器会知道正确引用它们。所以你可以做到这一点没有任何问题:
$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);
当然,你可以使用任何你想要的别名为选定的列。实际上,Query Builder Selects Documentation中的一个示例使用别名:email as user_email
。
要检查由查询生成器生成的SQL查询,可以使用toSql
方法。所以在你的情况下,而不是->paginate(30)
你可以有->toSql()
,它会返回一个字符串与查询生成器生成的SQL,你可以比较你的原始查询,看看它是否匹配。
很好的答案,谢谢。 – Tartar
非常欢迎。 – Bogdan