Laravel对象到数组

问题描述 投票:3回答:3

我试着用一段时间来代替集合,就像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 [...]) )

我知道在论坛上有更多关于它的内容,但它们都已经过时了。

谢谢

php arrays laravel object laravel-5
3个回答
2
投票

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

0
投票

由于您只获得了一个对象,因此请使用first()方法:

$object = DB::table('users')->where([...])->first();
$array = (array)$object;

0
投票

您可以使用Laravel Collection的map method将每个对象转换为数组。

© www.soinside.com 2019 - 2024. All rights reserved.