约束查询 get 使用 toArray 仍然还是 stdClass

我使用约束查询:

$result = DB::table('cache_1')->where('name','abc')->get()->toArray();

结果出来第一层是array数组,可是我如果要获取里面的值 发现还是stdClass;
比如,我获取第一个结果$result[0] 就能获取到一个数据,但是我需要获取这个数据里的id
比如$result[0]['id'] 这样,我想获取id 就会发现,嗯?报错Cannot use object of type stdClass as array,
这是见了什么鬼,为啥toArray只转了第一次层,而里面的并没有转成array;

所以我想问一下,是我操作问题嘛? 还是他就是酱紫?解决方法是我自己在foreach一次吗?
这样我觉得又耗费了一些执行时间和资源,所以有内置函数来解决这个问题的吗?
我不信就只有我一人。。。

附言 1  ·  5年前

我曲线救国了一下,在get后面加一句:
->map(function ($value) {return (array)$value;})->toArray();

这样,不知道这个map是不是一个闭包。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

试试这个吧

$result = DB::table('cache_1')->where('name','=','abc')->pluck('name')->toArray();

5年前 评论
hackxiaoya (楼主) 5年前
讨论数量: 10
Epona

可以试试

$result[0]->id

另外可以看看https://stackoverflow.com/questions/481879...这里

5年前 评论
hackxiaoya (楼主) 5年前

本来就是这样的;你啥样的场景需要转数组?

5年前 评论
hackxiaoya (楼主) 5年前

查询构造器是不是没有toArray方法,
你可以试试 (array)$data

5年前 评论
hackxiaoya (楼主) 5年前
panda-sir 5年前

用 Collection 包起来,然后 toArray 试试?极少用 DB,,,

我看了下,集合的 toArray 方法,,,只有子元素实现了 Arrayable 接口,才会把子元素也转成数组,,,所以上面说的没用,,,

所以,,,建议用 模型 啊,

5年前 评论
hackxiaoya (楼主) 5年前

试试这个吧

$result = DB::table('cache_1')->where('name','=','abc')->pluck('name')->toArray();

5年前 评论
hackxiaoya (楼主) 5年前

toArray只能取一行数据时转

5年前 评论

用Model操作就可以了,

$result = DB::table('cache_1')->where('name','abc')->get()->toArray();

改成

$result = Cache1::where('name','abc')->get()->toArray();

出来的应该就是数组格式

5年前 评论
hackxiaoya (楼主) 5年前

别人就喜欢用查询构造器 支持原生sql式查询 你们非要叫别人包一层ORM

5年前 评论

EventServiceProvider 中添加事件监听:

use Illuminate\Database\Events\StatementPrepared;
use Illuminate\Support\Facades\Event;
...
    public function boot()
    {
        parent::boot();

        Event::listen(StatementPrepared::class,function ($event){
            $event->statement->setFetchMode(\PDO::FETCH_ASSOC);
        });
    }
5年前 评论

json_decode(json_encode($data),true);

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!