Php 如何从原始查询中以数组而不是Laravel3中的对象的形式检索结果集
默认情况下,Laravel的原始查询方法以stdClass对象数组的形式返回结果:Php 如何从原始查询中以数组而不是Laravel3中的对象的形式检索结果集,php,laravel,laravel-3,Php,Laravel,Laravel 3,默认情况下,Laravel的原始查询方法以stdClass对象数组的形式返回结果: Array ( [0] => stdClass Object ( [id] => 1 [username] => admin [password] => admin123 [email] => admin@admin.com [created
Array
(
[0] => stdClass Object
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] => 2012-12-06 00:00:00
)
[1] => stdClass Object
(
[id] => 2
[username] => userna
[password] => user
[email] => user@gmail.com
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
问题是如何让Laravel返回数组:
Array
(
[0] => Array
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] => 2012-12-06 00:00:00
)
[1] => Array
(
[id] => 2
[username] => userna
[password] => user
[email] => user@gmail.com
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
我不知道laravel是否有内置函数以数组形式返回结果,但如果没有,您可以使用以下代码段: 其中,
$data
是返回的对象数组
$data = json_decode(json_encode((array) $data), true);
Laravel 3的原始答案
Eloquent有一个方法to_array()
从文档:
to_数组方法将自动获取上的所有属性
您的模型以及任何加载的关系
或
如果您使用的是fluent,则可以按照Sinan的建议执行操作,并更改全局配置以返回关联数组而不是对象
或者,您可以将对象转换为JSON或从JSON转换为数组,尽管在大多数情况下全局选项更可取。在通常喜欢对象但在某些边缘情况下需要阵列的项目中,可以使用以下选项。这种方法不能很好地发挥口才,在这种情况下使用上述方法
$users = DB::table('users')->where('name', '=', 'david')->get();
return array_map(function($val)
{
return json_decode(json_encode($val), true)
}, $users);
另一个选项是临时更改运行时配置
Config::set('database.fetch', PDO::FETCH_ASSOC);
对于Laravel~4
在Laravel 4以后的版本中,所有方法名称都符合PSR-2标准
$user = User::findOrFail($id);
return Response::json($user->toArray());
// In Laravel 5 onward the functions are preferred to facades.
return response()->json($user->toArray());
您还可以通过更改 application/config/database.php
'fetch' => PDO::FETCH_CLASS,
第31行至
'fetch' => PDO::FETCH_ASSOC,
@ramesh没问题,这里有另一个答案可能更有用,因为它使用的是laravel方法参见DavidBarker回答这是一个非常糟糕的做法,因为你们都在对它进行编码然后解码。这将产生完全相同的结果:
$data=(array)$data
@nerdklers它不会,因为$data
已经是一个数组了,它不会将内部对象更改为数组,我在发布这个难以控制的解决方法之前自己也尝试过这种方法:)请提供您的代码,这对我来说非常有意义,我正在尝试学习Laravel并遇到了这个障碍。这是一个真实而有效的问题——想知道那些说它没有使用这个框架的人是否有任何经验?为什么会关闭这个框架?人们需要克服自我。如果有更好的答案要添加,请重新打开未处理的异常消息:调用未定义的方法stdClass::to_array(),这是针对Laravel 3.x的,to_array()
是一个雄辩的方法。也在文档中。你能分享一些你的代码给我们看看问题在哪里吗?Fluent是否有一个相当于到_array()
?他的问题是:$arrOfObjects=DB::connection()->query('SELECT*from`table` LIMIT 0,3')代码>返回一个对象数组。思南回答了。stdClass是在laravel/database/connection.php文件中根据配置确定的。这是因为这个答案是针对laravel 3的。Laravel 4是toArray()
,但是如何在代码中动态执行它呢?我只想获取一个DB连接的数组。我有这个连接($this->getSqlServerConnectionName())
我想要类似于$sqlserv\u connection->fetch(PDO::fetch\u ASSOC)
我知道这不存在,但我如何实现这一点?只想指出“fetch”设置不是特定于连接的,它位于database.php的顶部。不知何故,我推断它是特定于连接的,并将其添加到每个连接中,但没有效果。希望这能帮助其他被误导的灵魂。不确定4或3,但在Laravel 5中,您可以进行查询:$query=DB::table('companys')->where('status','active')
然后在运行它之前设置它DB::connection()->setFetchMode(\PDO::FETCH\u ASSOC)
然后获取结果$result=$query->get()->toArray()
和$result
将是arrays@PhillipHarrington这似乎已被删除:(错误:调用未定义的方法illumb\Database\MySqlConnection::setFetchMode()
@JeffPuckett似乎已在5.4版中删除此问题:
'fetch' => PDO::FETCH_CLASS,
'fetch' => PDO::FETCH_ASSOC,