Красноречивый ORM laravel 5 Получить массив идентификаторов

50

Я использую Eloquent ORM laravel 5.1, я хочу вернуть массив идентификаторов больше 0, Моя модель называется test.

Я пробовал:

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

Он возвращает:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

Но я хочу, чтобы результат был в простом массиве вроде:

Array ( 1,2 )
Теги:
eloquent
model
laravel-5.1

5 ответов

114
Лучший ответ

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

test::where('id' ,'>' ,0)->lists('id')->toArray();

ПРИМЕЧАНИЕ. Лучше, если вы определите свои модели в формате Studly Case, например, Test.


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

test::where('id' ,'>' ,0)->get('id');

ОБНОВЛЕНИЕ: (Для версий> = 5.2)

В новых версиях >= 5.2 метод lists() устарел, теперь вместо него можно использовать метод pluck():

test::where('id' ,'>' ,0)->pluck('id')->toArray();
  • 3
    с массивом pluck ('id') является массив ('0' => 12, '1' => 14) и т. д., когда используется в WhereIn ('id', $ array), он выбирается не по id, а по массиву ключ, так что на 0,1 ...
  • 1
    toArray() должен возвращать массив вроде [12,14]
Показать ещё 2 комментария
4

прочитайте о методах lists()

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
  • 0
    когда я использую in_array_command в блейд-файле, показать эту ошибку. > in_array () ожидает, что параметр 2 будет массивом, объект задан
  • 0
    о, теперь я понимаю, вам нужно вызвать toArray (), lists () вернуть коллекцию
3

Из коллекции вы можете сделать это еще одним способом:

$collection->pluck('id')->toArray()

Это вернет индексированный массив, который может быть использован laravel, например, в запросе whereIn.

  • 1
    Также используется для выпадающего списка.
3

Правильный ответ на этот вопрос - метод lists, это очень просто:

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');

Привет!

  • 0
    Как бы вы получили список связанных идентификаторов в массиве через отношения многие ко многим ??
  • 0
    Возможно, вы можете использовать класс БД, например: DB :: table ('name_of_table') -> где ('условие') -> списки ('id');
0

Вы также можете использовать метод all() для получения массива выбранных атрибутов.

$test=test::select('id')->where('id' ,'>' ,0)->all();

Привет

  • 1
    Не работает Он говорит, что вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: all ()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню