2015-11-03 139 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