如何在 laravel 查询构建器中为 sql select 列设置别名?

How can I alias sql select columns in laravel query builder?

我有一个这样的查询,我不确定如何为每个 table 的 select 列设置别名。你能帮我吗?

$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();

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

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

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

的标注框中找到

根据我得出的结论,您想要 select 来自 $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