Laravel – получить результат БД без имени столбца таблицы

Я хотел получить результат только со значениями, а не с именем столбца таблицы в Laravel 4.2. Например,

$recs = DB::table('table_name')
        ->select('id', 'title')
        ->get();

результат

array(2) {
  [0]=>
  object(stdClass)#863 (2) {
    ["id"]=>
    int(2)
    ["title"]=>
    string(8) "my title"
  }
  [1]=>
  object(stdClass)#862 (2) {
    ["id"]=>
    int(3)
    ["title"]=>
    string(10) "my title 2"
  }
}

но я хочу иметь только результат, а не имя столбца, например

[
  2,
  "my title"
],
[
  3,
  "my title 2"
]

да, я могу сделать это, зациклив результат и создав новый массив без имени столбца. Но есть ли способ получить результат таким образом, используя Laravel?


person user2609021    schedule 23.03.2017    source источник


Ответы (4)


Пытаться

$recs = DB::table('table_name')->pluck('id', 'title');
dd($recs->all());
person EddyTheDove    schedule 23.03.2017
comment
Извините, вам нужно добавить all(). Проверьте мой код еще раз. - person EddyTheDove; 23.03.2017
comment
«выщипывать» возвращает число, и поэтому он показывает ошибку, когда ставит «все ()» на число - person user2609021; 24.03.2017

Вы можете использовать map() и array_values():

$recs->map(function($i) {
    return array_values((array)$i);
})

Я не уверен насчет Laravel 4.2, но я только что протестировал его, и он отлично работает в Laravel 5.3. Если это не работает в версии 4.2, используйте встроенную функцию array_map(). вместо.

person Alexey Mezenin    schedule 23.03.2017
comment
Это единственный (почти) правильный ответ из того, что я знаю. Вам просто нужно сделать return array_values($i->toArray());, чтобы использовать array_values. При этом меня действительно интересует вариант использования для этого (преобразование удобочитаемых ключей в индексы). - person DevK; 23.03.2017
comment
@devk Я тоже это тестировал, и, поскольку OP использует здесь Query Builder, toArray() вернет ошибку. По крайней мере, в 5.3 (хотя насчет 4.2 не уверен). Я отредактировал свой код, чтобы преобразовать объекты в массивы. Сначала я скопировал неправильный код. Спасибо, что упомянули об этом. - person Alexey Mezenin; 23.03.2017

Справочник

Попробуйте $recs->flatten()->all()

Обновить

Поскольку ваш $recs выглядит как массив из вашей ошибки. Попробуйте преобразовать в collection. Я надеюсь, что это будет работать на v4.2

$recsCollection = new \Illuminate\Database\Eloquent\Collection($recs);
$recsCollection->flatten()->all();
person Saumini Navaratnam    schedule 23.03.2017
comment
спасибо за ответ... я получаю сообщение об ошибке, так как я использую Laravel 4.2, а данная ссылка находится в 5.4 - person user2609021; 23.03.2017
comment
получение ошибки Вызов функции-члена flatten() в массиве - person user2609021; 23.03.2017
comment
Вызов неопределенной функции collect (), я думаю, что «сбор» не поддерживается в 4.2 - person user2609021; 24.03.2017
comment
Обновил ответ. collect вспомогательная функция недоступна в версии 4.2 - person Saumini Navaratnam; 24.03.2017

DB::table('table_name')->all()->lists('id', 'title')->toArray()

Справочник: получение списка значений столбца

person Preshan Pradeepa    schedule 12.09.2018