DB query builder toArray () laravel 4

Я пытаюсь преобразовать запрос в массив с помощью метода toArray() но это не работает для построителя запросов. Есть идеи для его преобразования?

пример

DB::table('user')->where('name',=,'Jhon')->get()->toArray();

7 ответов


toArray-это модельный метод красноречия, поэтому вам нужна красноречивая модель, попробуйте следующее:

 User::where('name', '=', 'Jhon')->get()->toArray();

http://laravel.com/docs/eloquent#collections


если вы предпочитаете использовать Query Builder вместо красноречивого, вот решения

$result = DB::table('user')->where('name',=,'Jhon')->get();

Первый Вариант

$array = (array) $result;

Второй Вариант

$array = get_object_vars($result);

Третий Способ

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

надеюсь, что это может помочь


обратите внимание, что опция, представленная ниже, по-видимому, больше не поддерживается с Laravel 5.4 (спасибо @Alex).

в Laravel 5.3 и ниже есть метод установить режим выборки для SELECT запросов.

в этом случае было бы более эффективно сделать:

DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::table('user')->where('name',=,'Jhon')->get();

таким образом, вы не будете тратить время на создание объектов, а затем преобразовывать их в массивы.


и другое решение

$objectData = DB::table('user')
    ->select('column1', 'column2')
    ->where('name', '=', 'Jhon')
    ->get();
$arrayData = array_map(function($item) {
    return (array)$item; 
}, $objectData);

это хорошо, если вам нужно только несколько столбцов из сущности.


Это можно сделать с помощью построителя запросов. Просто используйте SELECT вместо TABLE и GET.

DB::select('select * from user where name = ?',['Jhon']);

заметки: 1. Допускается несколько вопросительных знаков. 2. Второй параметр должен быть массивом, даже если есть только один параметр. 3. Laravel автоматически очистит параметры, поэтому вам не нужно.

дополнительная информация здесь:http://laravel.com/docs/5.0/database#running-queries

Хм, получается, что по-прежнему возвращает стандартный класс для меня, когда я не использовать предложение where. Я нашел это помогло:

foreach($results as $result)
{
print_r(get_object_vars($result));
}

однако get_object_vars не рекурсивен, поэтому не используйте его в $results.


попробуй этот

DB::table('user')->where('name','Jhon')->get();

просто убрать знак"=". . . .потому что вы пытаетесь массив только имя 'Джон' . . . . . . . .Надеюсь, это поможет тебе . .


самый простой способ-использовать саму функцию laravel toArray:

    $result = array_map(function ($value) {
        return $value instanceof Arrayable ? $value->toArray() : $value;
    }, $result);