ORM hùng hồn laravel 5 Nhận mảng id


84

Tôi đang sử dụng Eloquent ORM laravel 5.1, tôi muốn trả về một mảng id lớn hơn 0, Mô hình của tôi được gọi test.

Tôi đã thử :

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

Nó trả về:

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

Nhưng tôi muốn kết quả là một mảng đơn giản như:

Array ( 1,2 )

Câu trả lời:


208

Bạn có thể sử dụng lists():

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

LƯU Ý: Better nếu bạn xác định mô hình của bạn trong Studly Caseđịnh dạng, ví dụ Test.


Bạn cũng có thể sử dụng get():

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

CẬP NHẬT: (Đối với phiên bản> = 5.2)

Các lists()phương pháp được tán thành trong phiên bản mới >= 5.2, bây giờ bạn có thể sử dụng pluck()phương pháp thay vì:

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

LƯU Ý: Nếu bạn cần một chuỗi , chẳng hạn như trong một phiến , bạn có thể sử dụng hàm mà không có phần toArray () , như:

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

3
với pluck ('id') mảng là mảng ('0' => 12, '1' => 14) và v.v., khi được sử dụng trong WhereIn ('id', $ array), nó không chọn theo id mà là theo mảng key, so by 0,1 ...
Gediminas

2
toArray()phải trả lại một mảng như[12,14]
Zakaria Acharki

1
Ồ vâng, bạn nói đúng, tôi đã gỡ lỗi qua Debugbar ant print_r, và cả hai đều hiển thị giá trị mảng với các khóa, nhưng không có khóa nào. Cảm ơn bạn!
Gediminas,

Chúng tôi đang mắc kẹt trên 4.2 cho một dự án, vì vậy tôi đánh giá cao việc giữ lại -> danh sách ('id') tham chiếu. Mặc dù điều đó tạo ra một mảng trực tiếp, nhưng không cần phải -> toArray nó.
Dustin Graham

18

Từ một Collection, một cách khác bạn có thể làm sẽ là:

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

whereIn()Ví dụ, điều này sẽ trả về một mảng được lập chỉ mục, hoàn toàn có thể sử dụng được bởi laravel trong một truy vấn.


2
Cũng được sử dụng cho danh sách Drop Down.
Bira

Để có được bộ sưu tập để nhổ từ từ mô hình \YourModel::all(['id'])... ->pluck...(với xác định chỉ cột ID bạn không tải tất cả dữ liệu vào mô hình)
jave.web

5

Câu trả lời chính xác cho đó là phương pháp lists, nó rất đơn giản như sau:

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

Trân trọng!


Làm thế nào bạn có được danh sách id liên quan trong mảng thông qua mối quan hệ nhiều đến nhiều ??
Pathros

Có thể bạn có thể sử dụng lớp DB, ví dụ: DB :: table ('name_of_table') -> where ('condition') -> list ('id');
Radames E. Hernandez

5

Bạn có thể sử dụng all()method thay vì toArray()method (xem thêm: tài liệu laravel ):

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

Nếu cần string, bạn có thể sử dụng mà không cần toArray()tệp đính kèm:

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

4

đọc về phương thức danh sách ()

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

khi tôi sử dụng in_array_command trong tệp phiến hiển thị lỗi này. > in_array () mong đợi tham số 2 là mảng, đối tượng đã cho
hoang tưởng

oh bây giờ tôi đã hiểu bạn, bạn cần gọi toArray (), danh sách () trả lại bộ sưu tập
Amir Bar

0

Chỉ là một thông tin bổ sung, nếu bạn đang sử dụng DB:

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

Và nếu sử dụng mô hình Eloquent:

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

0

Mặc dù bạn đã đánh dấu Câu trả lời, Đây là một cách tiếp cận đơn giản hơn nhiều

App\User::pluck('id')->toArray()

-2

Bạn cũng có thể sử dụng phương thức all () để lấy mảng các thuộc tính đã chọn.

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

Trân trọng


1
Nó không hoạt động. Nó nói Gọi phương pháp xác định Illuminate \ Database \ Query \ Builder :: tất cả ()
Jaber Al Nahian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.