Ответ 1
toArray - это модельный метод Eloquent, поэтому вам нужна модель Eloquent, попробуйте следующее:
User::where('name', '=', 'Jhon')->get()->toArray();
Я пытаюсь преобразовать запрос в массив с помощью метода toArray()
, но он не работает для построителя запросов. Любые идеи для его преобразования?
Пример
DB::table('user')->where('name',=,'Jhon')->get()->toArray();
toArray - это модельный метод Eloquent, поэтому вам нужна модель Eloquent, попробуйте следующее:
User::where('name', '=', 'Jhon')->get()->toArray();
Если вы предпочитаете использовать Query Builder вместо Eloquent, то это решения
$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 и ниже существует метод установить режим выборки для выбора запросов.
В этом случае это может быть более эффективным:
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
Hmmmmmm, оказывается, что все еще возвращает стандартный класс для меня, когда я не использую предложение where. Я нашел, что это помогло:
foreach($results as $result)
{
print_r(get_object_vars($result));
}
Однако get_object_vars не является рекурсивным, поэтому не используйте его для $results.
попробуйте этот
DB::table('user')->where('name','Jhon')->get();
просто удалите знак "="., потому что вы пытаетесь собрать только имя "jhon".,,, Я надеюсь, что это поможет вам..