Laravel 5:本机 SQL 查询生成器
Laravel 5: Native SQL to Query Builder
我正在尝试在 Laravel 5 上连接 2 个表并且必须使用查询生成器。我已经得到了它的 sql 但我无法将它转换为 Query Builder 语法。 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
table.Anybody 中检索 3 种不同类型的 full_name
列帮助我了解如何使用正确的查询生成器语法编写它?。任何帮助将不胜感激。
您可以对 select 列和表以及连接使用别名,因为查询生成器会知道如何正确引用它们。所以你可以毫无问题地做到这一点:
$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);
当然,您可以为 selected 列使用任何您想要的别名。实际上 Query Builder Selects Documentation 中的示例之一使用了别名:email as user_email
.
要检查查询生成器生成的 SQL 查询,您可以使用 toSql
方法。因此,在您的情况下,您可以使用 ->toSql()
而不是 ->paginate(30)
,这将 return 一个带有查询生成器生成的 SQL 的字符串,您可以将其与原始查询进行比较看看是否匹配。
我正在尝试在 Laravel 5 上连接 2 个表并且必须使用查询生成器。我已经得到了它的 sql 但我无法将它转换为 Query Builder 语法。 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
table.Anybody 中检索 3 种不同类型的 full_name
列帮助我了解如何使用正确的查询生成器语法编写它?。任何帮助将不胜感激。
您可以对 select 列和表以及连接使用别名,因为查询生成器会知道如何正确引用它们。所以你可以毫无问题地做到这一点:
$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);
当然,您可以为 selected 列使用任何您想要的别名。实际上 Query Builder Selects Documentation 中的示例之一使用了别名:email as user_email
.
要检查查询生成器生成的 SQL 查询,您可以使用 toSql
方法。因此,在您的情况下,您可以使用 ->toSql()
而不是 ->paginate(30)
,这将 return 一个带有查询生成器生成的 SQL 的字符串,您可以将其与原始查询进行比较看看是否匹配。