Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从原始查询中以数组而不是Laravel3中的对象的形式检索结果集_Php_Laravel_Laravel 3 - Fatal编程技术网

Php 如何从原始查询中以数组而不是Laravel3中的对象的形式检索结果集

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

默认情况下,Laravel的原始查询方法以stdClass对象数组的形式返回结果:

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,