Как получить результирующий набор из необработанного запроса в виде массива вместо объекта в Laravel 3

по умолчанию методы необработанных запросов 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
            )
    )

3 ответов


оригинальный ответ для Laravel 3

красноречивый имеет способ to_array()

из docs:

метод to_array автоматически захватит все атрибуты на ваша модель, а также любые загруженные отношения.

$user = User::find($id);

return Response::json($user->to_array());

или

return Response::eloquent($user);

если вы используете fluent, вы можете сделать, как предложил Синан, и изменить глобальную конфигурацию, чтобы вернуть ассоциативный массив, а не объекты.

кроме того, вы можете преобразовать объект в и из 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,

Я не знаю, имеет ли laravel встроенную функцию для возврата результатов в виде массива, но если нет, вы можете использовать этот фрагмент:

здесь $data ваш возвращенный массив объектов

$data = json_decode(json_encode((array) $data), true);