DB query builder toArray () laravel 4
Я пытаюсь преобразовать запрос в массив с помощью метода toArray()
но это не работает для построителя запросов. Есть идеи для его преобразования?
пример
DB::table('user')->where('name',=,'Jhon')->get()->toArray();
7 ответов
toArray-это модельный метод красноречия, поэтому вам нужна красноречивая модель, попробуйте следующее:
User::where('name', '=', 'Jhon')->get()->toArray();
если вы предпочитаете использовать 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);