约束查询 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  ·  4年前

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

试试这个吧

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

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

可以试试

$result[0]->id

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

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

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

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

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

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

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

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

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

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

试试这个吧

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

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

toArray只能取一行数据时转

4年前 评论

用Model操作就可以了,

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

改成

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

出来的应该就是数组格式

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

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

4年前 评论

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);
        });
    }
4年前 评论

json_decode(json_encode($data),true);

3年前 评论

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