Подтвердить что ты не робот

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

По умолчанию методы raw-запросов Laravel возвращают результаты в виде массивов объектов stdClass:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [username] => admin
            [password] => admin123
            [email] => [email protected]
            [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] => [email protected]
            [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] => [email protected]
                [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] => [email protected]
                [created_at] => 2012-12-06 00:00:00
                [updated_at] => 2012-12-05 00:00:00
            )
    )
4b9b3361

Ответ 1

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

Красноречивый имеет метод to_array()

Из документов:

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

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

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

или

return Response::eloquent($user);

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

Кроме того, вы можете конвертировать объект в JSON и из него, чтобы преобразовать его в массив, хотя в большинстве случаев предпочтительнее использовать глобальный параметр. Вы можете использовать следующее в проектах, где вы предпочитаете объекты обычно, но в некоторых случаях края нужен массив. Этот метод не будет хорошо работать с Eloquent, используйте вышеприведенные методы в этом случае.

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

Ответ 2

Вы также можете получить весь результат всегда как массив, изменив

приложение/Config/database.php

'fetch' => PDO::FETCH_CLASS,

в строке 31 на

'fetch' => PDO::FETCH_ASSOC,

Ответ 3

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

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

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