2015-11-03 3 views
0

Я пытаюсь присоединиться к 2 таблицам на Laravel 5 и должен использовать Query Builder. У меня уже есть sql для него, но я не могу преобразовать его в синтаксис Query Builder. SQL нижеLaravel 5: родной SQL для Query Builder

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 для Query Builder, как мне нужно retrive 3 различных типов full_name столбцов из vehicles таблицы . Кто-нибудь может мне помочь, как написать его в правильном синтаксисе Query Builder? Любая помощь будет оценена по достоинству.

ответ

0

Вы можете использовать псевдонимы с отдельными столбцами и таблицами, а также объединениями, потому что Query Builder будет знать, чтобы правильно их цитировать. Таким образом, вы можете сделать это без проблем:

$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, порожденную Query Builder вы можете использовать метод toSql. Поэтому в вашем случае вместо ->paginate(30) вы можете получить ->toSql(), который вернет строку с SQL, сгенерированную Query Builder, которую вы можете сравнить с вашим сырым запросом и посмотреть, совпадает ли он.

+0

Отличный ответ, спасибо. – Tartar

+1

Вы очень желанны. – Bogdan