如何在 laravel 查询生成器中为 sql 选择列添加别名?

Posted

技术标签:

【中文标题】如何在 laravel 查询生成器中为 sql 选择列添加别名?【英文标题】:How can I alias sql select columns in laravel query builder? 【发布时间】:2022-01-23 00:21:30 【问题描述】:

我有一个这样的查询,我不确定如何为每个表的选择列设置别名。你能帮我解决这个问题吗?

$columns = array_merge(json_decode($data->columns), json_decode($data->columns2));

$result = DB::table($data->type)
                    ->select($columns)
                    ->join('tabs', 'data.id', '=', 'tabs.id')
                    ->get();

【问题讨论】:

$columns的值是多少 【参考方案1】:

要回答您的问题,请像在 SQL 中一样添加 AS newColumnName

->select(['name AS title', 'email AS emailAddress']).

此外,您真的不想像这样将未经处理的表名和列名传递给您的查询。它们没有被 Laravel 清理,是一个潜在的漏洞。更多信息可以在https://laravel.com/docs/8.x/queries#where-clauses的标注框中找到

从 cmets 中我得出的结论是,您希望从 $data->columns 中选择列,并为它们设置别名,就像它们在 $data->columns2 中一样。我也不知道数据结构,但我认为你的意思是这样的:

$select = array_map(
    function($column, $alias) 
        return "$column AS $alias";
    , 
    $data->columns,
    $data->columns2
);

var_dump($select);

这是一个沙盒:http://sandbox.onlinephpfunctions.com/code/12487b8f2d590aa9f0d7a6cb0d7d4f1f067b4cb0

【讨论】:

这并不能真正回答我的问题:( 我误解了这个问题吗?您是在问如何在选择列时使用别名? 但是对于列作为变量传递的特定情况 我告诉你,你真的不应该 :) 但如果你真的想......我会更新我的答案。 谢谢你! :)

以上是关于如何在 laravel 查询生成器中为 sql 选择列添加别名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 查询生成器中为同一列构建多个条件的查询?

如何在 Laravel 7 中为单选按钮设置表单标签

如何在查询生成器 laravel 中执行此 SQL

如何修复 laravel 5.5 中的查询生成器错误 sql 注入 *

如何将 sql 转换为查询生成器 laravel

我如何将 SQL 原始查询重写为 Laravel 查询生成器