【问题标题】:Laravel 5: Native SQL to Query BuilderLaravel 5:查询构建器的原生 SQL
【发布时间】:2016-02-04 05:46:36
【问题描述】:

我正在尝试在 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 表中检索3 种不同类型的full_name 列。任何人都可以帮助我了解如何正确编写它查询生成器语法?。任何帮助将不胜感激。

【问题讨论】:

    标签: php sql laravel laravel-5 query-builder


    【解决方案1】:

    您可以将别名用于选择列和表以及连接,因为查询生成器会知道正确引用它们。所以你可以毫无问题地做到这一点:

    $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 方法。因此,在您的情况下,您可以使用 ->toSql() 而不是 ->paginate(30),这将返回一个带有查询生成器生成的 SQL 的字符串,您可以将其与原始查询进行比较,看看它是否匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      相关资源
      最近更新 更多