Eloquent chỉ lấy một cột dưới dạng một mảng


84

Làm thế nào để chỉ lấy một cột dưới dạng một mảng dimentional trong laravel 5.2 bằng eloquent?

Tôi đã thử:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();

nhưng cái này cho nó dưới dạng 2 mảng dimentional như:

array(2) {
      [0]=>
      array(1) {
        ["word_one"]=>
        int(2)
      }
      [1]=>
      array(1) {
        ["word_one"]=>
        int(3)
      }
    }

nhưng tôi muốn hiểu nó là:

array(2) {
    [0]=>2
    [1]=>3
}

Câu trả lời:


181

Bạn có thể sử dụng pluckphương pháp:

Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();

Để biết thêm thông tin về những phương pháp có sẵn để sử dụng với bộ sưu tập, bạn có thể xem Tài liệu Laravel .


Cảm ơn, đó là chức năng tôi đã thấy ở đâu đó nhưng không tìm thấy nó nữa, cũng cho bản ghi, để câu trả lời được đặt trước, sau đó có thể thêm -> toArray () vì nó trả về bộ sưu tập vào lúc này và lựa chọn có thể bị bỏ qua từ truy vấn cho laravel 5.2 ít nhất.
Riiwo

Đúng về việc selectthừa, nhưng tôi không thấy có vấn đề gì với việc có một bộ sưu tập, vì một bộ sưu tập chỉ là một mảng ưa thích có thể được lặp lại giống như một mảng. Tôi hiếm khi sử dụng mảng thay vì bộ sưu tập vì dấu chân bộ nhớ nói chung không phải là vấn đề và các bộ sưu tập có thể dễ dàng truyền sang mảng khi cần thiết vì chúng triển khai toArrayphương thức. Tuy nhiên, để nhất quán với câu hỏi của bạn, tôi đã sửa đổi câu trả lời để chuyển đổi kết quả.
Bogdan

Tại thời điểm này tôi khá mới để laravel và hùng hồn, vì vậy tôi cần những là mảng các số điện thoại để sau này sáp nhập mảng với một tương tự và sử dụng nó trong truy vấn khác
Riiwo

Cảm ơn vì đã chia sẻ!
Bhargav Nanekalva

3
Trong khi a Collectioncũng có một pluck()phương thức - Những gì bạn đang sử dụng là một phương thức của QueryBuilder.
Paul Spiegel

12

Nếu bạn nhận được nhiều mục, phương pháp đúng được gọi là danh sách .

    Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();

2
Tuyệt vời! Bản lists()thân nó hoạt động tốt. Cảm ơn bạn.
moreirapontocom 27/09/17

1
Bùm! Điều này hoạt động hoàn hảo. Nhưng không cần sử dụng hàm toArray () vì danh sách () trả về một mảng.
Sahan

1
lists()không còn được dùng trong Laravel Ver.5.2 trở lên, trong đó pluck()như trong câu trả lời được gắn thẻ là cách.
Masa Sakano

7

Điều đó có thể được thực hiện trong ngắn hạn như:

Model::pluck('column')

trong đó mô hình là Mô hình chẳng hạn như Usermô hình & cột là tên cột nhưid

nếu bạn làm

User::pluck('id') // [1,2,3, ...]

& tất nhiên bạn có thể có bất kỳ mệnh đề nào khác như wheremệnh đề trước khi nhổ


5

Tôi gặp câu hỏi này và nghĩ rằng tôi sẽ làm rõ rằng phương thức danh sách () của một đối tượng trình xây dựng hùng hồn đã bị giảm giá trị trong Laravel 5.2 và được thay thế bằng pluck ().

// <= Laravel 5.1
Word_relation::where('word_one', $word_id)->lists('word_one')->toArray();
// >= Laravel 5.2
Word_relation::where('word_one', $word_id)->pluck('word_one')->toArray();

Các phương thức này cũng có thể được gọi trên một Bộ sưu tập chẳng hạn

// <= Laravel 5.1
  $collection = Word_relation::where('word_one', $word_id)->get();
  $array = $collection->lists('word_one');

// >= Laravel 5.2
  $collection = Word_relation::where('word_one', $word_id)->get();
  $array = $collection->pluck('word_one');

-3

Tôi nghĩ bạn có thể đạt được nó bằng cách sử dụng đoạn mã dưới đây

Model::get(['ColumnName'])->toArray();


Bạn có thể vui lòng giải thích điều đó.
J ... S

1
Theo như tôi biết thì việc làm Model::get(['ColumnName'])->toArray();tương đương với việc Model::select('ColumnName')->get()->toArray()tạo ra một mảng nhiều chiều.
SamBremner
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.