Красномовний ORM laravel 5 Отримати масив ідентифікаторів


84

Я використовую 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 )

Відповіді:


208

Ви можете використовувати lists():

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

ПРИМІТКА: Краще, якщо ви визначаєте свої моделі у Studly Caseформаті, наприклад Test.


Ви також можете використовувати get():

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

ОНОВЛЕННЯ: (Для версій> = 5.2)

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

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

ПРИМІТКА. Якщо вам потрібен рядок , наприклад, в леза , ви можете використовувати функцію без частини toArray () , наприклад:

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

3
з масивом pluck ('id') - це масив ('0' => 12, '1' => 14) та ін., коли використовується в WhereIn ('id', $ array), він вибирає не за ідентифікатором, а за масивом ключ, тож на 0,1 ...
Гедимін

2
toArray()повинен повернути масив типу[12,14]
Zakaria Acharki

1
о так, ви маєте рацію, я налагоджував за допомогою Debugbar ant print_r, і обидва вони показували значення масивів з ключами, але ключів немає. Дякую!
Гедимін,

Ми застрягли на 4.2 для одного проекту, тому я вдячний за збереження посилання -> lists ('id'). Хоча це генерувало масив безпосередньо, не потрібно було -> toArray його.
Дастін Грем

18

З Collectionіншого боку, ви можете зробити це ще одним способом:

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

Це поверне індексований масив, наприклад, ідеально використаний laravel у whereIn()запиті.


2
Також використовується для випадаючого списку.
Біра

Щоб отримати колекцію для вирвання з моделі \YourModel::all(['id'])... ->pluck...(вказавши лише стовпець ідентифікатора, ви не завантажуєте всі дані в модель)
jave.web

5

Правильна відповідь на це - метод lists, він дуже простий, як це:

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

З повагою!


Як би ви отримали відповідний список ідентифікаторів у масиві через відносини багато до багатьох ??
Pathros

Можливо, ви можете використовувати клас DB, приклад: DB :: table ('name_of_table') -> where ('condition') -> lists ('id');
Радамес Е. Ернандес,

5

Ви можете використовувати all()метод замість toArray()методу (див. Більше: документація laravel ):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array

Якщо вам потрібна string, ви можете використовувати без toArray()вкладення:

test::where('id' ,'>' ,0)->pluck('id'); //returns string

4

прочитати про метод Списки ()

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

коли я використовую in_array_command у файлі леза, показую цю помилку. > in_array () очікує, що параметром 2 буде масив, дано об'єкт
параноїк

о, тепер я вас розумію, вам потрібно зателефонувати до array (), lists () return collection
Amir Bar

0

Просто додаткова інформація, якщо ви використовуєте DB:

DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();

І якщо використовується модель Eloquent:

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


-2

Ви також можете використовувати метод all () для отримання масиву вибраних атрибутів.

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

З повагою


1
Це не працює. У ньому сказано: Виклик невизначеного методу Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.