Laravel 对象到数组
Posted
技术标签:
【中文标题】Laravel 对象到数组【英文标题】:Laravel Object to Array 【发布时间】:2018-06-07 13:10:50 【问题描述】:我尝试了一段时间使用数组而不是集合,就像 Laravel 所做的那样。
我尝试了这个方法,没有成功:
Event::listen(StatementPrepared::class, function ($event)
$event->statement->setFetchMode(...);
);
正如https://laravel.com/docs/5.4/upgrade#upgrade-5.4.0 中所述,但它不起作用...
我也尝试过这样做:
DB::table('users')->where([...])->take(1)->get()->toArray();
但它正在做:
Array ( [0] => stdClass Object ( [uid] => 1 [...]) )
我知道论坛上有更多关于它的内容,但它们都已经过时了。
谢谢
【问题讨论】:
【参考方案1】:toArray
正在将对象集合更改为对象数组,就像它应该做的那样。如果希望集合内的对象也是数组,则需要先对每个对象进行转换:
$collection = DB::table('users')->where([...])->take(1)->get();
$array = $collection->map(function($obj)
return (array) $obj;
)->toArray();
要在您的整个应用程序中使用此功能,您可以在您的服务提供商之一的boot
方法中添加一个集合宏:
Collection::macro('toArrays', function ()
return $this->map(function ($value)
return (array) $value;
)->toArray();
);
这在服务提供者文件的顶部:
use Illuminate\Support\Collection;
然后,您可以在任何获得一组数据库结果的地方调用toArrays
:
DB::table('users')->where([...])->get()->toArrays();
【讨论】:
有没有办法为整个网站只做一次,因为,我只想使用它。 查看我的编辑,了解在您的应用程序中的任何集合上使用此功能的简单方法@KarylLamoureux 谢谢,只是小事,现在是Array ( [0] => Array ( [uid] => 1 [...]) )
。这是删除第一个数组的方法吗?只在宏中有Array ( [uid] => 1 [...])
吗? @杰夫
当您使用take(1)->get()
时,它仍会返回一个集合。如果您想要一个对象作为响应,则需要使用first()
,请参阅@Alexey 的答案。
我已将 take(1)->get()
替换为 first()
并表示:调用未定义的方法 stdClass::toArrays()【参考方案2】:
由于您只得到一个对象,请使用first()
方法:
$object = DB::table('users')->where([...])->first();
$array = (array)$object;
【讨论】:
好答案,我没有注意到他只取了 1。您可能需要对它进行类型转换而不是调用toArray()
,因为它只是一个基本对象
@Jeff 是的,我刚刚对其进行了测试并在您发表评论的同时更新了答案。 OP 需要使用(array)
强制转换。谢谢。【参考方案3】:
你可以使用 Laravel Collection 的 map method 将每个对象变成一个数组。
【讨论】:
以上是关于Laravel 对象到数组的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5:in_array() 期望参数 2 是数组,给定对象
Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中