2015-11-03 140 views
0

我想在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列任何人都可以帮助我解释如何用正确的查询生成器语法编写它。任何帮助,将不胜感激。

回答

0

您可以在选择列和表以及连接时使用别名,因为查询生成器会知道正确引用它们。所以你可以做到这一点没有任何问题:

$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,你可以比较你的原始查询,看看它是否匹配。

+0

很好的答案,谢谢。 – Tartar

+1

非常欢迎。 – Bogdan