You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Laravel Query Builder返回非关联数组结果

解决Laravel中数据库查询结果转非关联(索引)数组的问题

嗨,作为Laravel新手遇到这个问题很正常,我来帮你搞定!之前用Datatable jQuery服务端处理时习惯了索引数组格式,而Laravel默认返回的查询结果转成数组后是带字段名键的关联数组,下面给你几种实用的解决方案:

1. 单字段转索引数组

如果你只需要提取某一列的数据(比如ID列表),直接用pluck()方法就能快速得到纯索引数组:

// 示例:获取所有用户的ID索引数组
$userIds = App\Models\User::pluck('id')->toArray();
// 结果:[1, 2, 3, ...]

2. 多字段转二维索引数组

如果需要返回多列数据(对应Datatable的多列展示),可以先获取关联数组结果,再通过array_values()把每个子数组转成索引格式:

方法一:用集合+匿名函数处理

$users = App\Models\User::select('id', 'name', 'email', 'created_at')->get();

// 转换为二维索引数组
$indexedUsers = $users->map(function($user) {
    // 把单个用户的关联数组转成索引数组
    return array_values($user->toArray());
})->toArray();

方法二:更简洁的数组函数写法

$users = App\Models\User::select('id', 'name', 'email', 'created_at')->get()->toArray();
$indexedUsers = array_map('array_values', $users);

3. 结合Datatable服务端处理的完整示例

如果你用了yajra/laravel-datatables包来做服务端处理,可以在生成Datatable响应前,把最终的data数据转成索引数组:

use Yajra\DataTables\Facades\DataTables;

public function datatableServer()
{
    $query = App\Models\User::select('id', 'name', 'email', 'created_at');

    // 初始化Datatable处理
    $datatable = DataTables::of($query)
        ->editColumn('created_at', function($user) {
            return $user->created_at->format('Y-m-d H:i:s');
        });

    // 获取原始响应数据
    $response = $datatable->make(true)->getData();
    
    // 将data部分的关联数组转为索引数组
    $response->data = array_map(function($item) {
        return array_values((array)$item);
    }, $response->data);

    // 返回处理后的JSON响应
    return response()->json($response);
}

注意事项

  • 确保你在select()里指定的字段顺序,和前端Datatable配置的列顺序完全一致,这样索引数组的每一项才能对应到正确的列。
  • 如果是用DB门面查询(而非Eloquent模型),处理逻辑完全一样,只需要把App\Models\User换成DB::table('users')即可。

内容的提问来源于stack exchange,提问作者Yuvaraj Jeganathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:09:29