Eloquentは配列として1つの列のみを取得します


88

雄弁なものを使用して、laravel 5.2で1つの次元配列として1つの列のみを取得するにはどうすればよいですか?

私が試してみました:

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

しかし、これは次のような2次元配列としてそれを与えます:

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

しかし、私はそれを次のように取得したいと思います:

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

回答:


191

次のpluck方法を使用できます。

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

コレクションで使用できるメソッドの詳細については、Laravelのドキュメントをご覧ください。


おかげで、それは私がどこかで見た関数でしたが、レコードのために、答えが正確であるためにそれをもう見つけられませんでした、そして多分-> toArray()を追加してくださいそれは現時点でコレクションを返し、selectは省略できます少なくともlaravel5.2のクエリから。
riiwo 2016年

select冗長であることについては真実ですが、コレクションは配列と同じように繰り返すことができる単なる豪華な配列であるため、結果としてコレクションを持つことに問題はありません。通常、メモリフットプリントは問題にならないため、コレクションの代わりに配列を使用することはめったにありません。コレクションはtoArrayメソッドを実装しているため、必要に応じて配列に簡単にキャストできます。ただし、質問との一貫性を保つために、結果を変換するように回答を変更しました。
ボグダン2016年

現時点では、私はlaravelと雄弁にまったく慣れていないので、後で配列を同様の配列とマージして別のクエリで使用するために、これらを数値の配列として必要としました
Riiwo 2016年

これを共有していただきありがとうございます!
Bhargav Nanekalva 2016

3
aにCollectionpluck()メソッドがありますが、使用しているのはのメソッドですQueryBuilder
Paul Spiegel

12

複数のエントリを受け取った場合、正しいメソッドはリストと呼ばれます

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

2
驚くばかり!それlists()自体でうまく機能します。ありがとうございました。
moreirapontocom 2017

1
ブーム!これは完全に機能します。ただし、lists()は配列を返すため、toArray()関数を使用する必要はありません。
サハン2018年

1
lists()Laravel Ver.5.2以降では非推奨ですがpluck()、タグ付きの回答がその方法です。
坂野

8

簡単に言うと、次のように実行できます。

Model::pluck('column')

ここで、modelは、次のUserような列名としてのmodel&columnなどのモデルです。id

もしあなたがそうするなら

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

&もちろん、あなたはwhere摘む前に条項のような他の条項を持つことができます


6

私はこの質問に出くわし、雄弁なビルダーオブジェクトのlists()メソッドがLaravel 5.2で減価償却され、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();

これらのメソッドは、たとえばコレクションで呼び出すこともできます

// <= 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');

-4

以下のコードを使用することで達成できると思います

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


それを説明していただけませんか。
J ... S

1
私の知る限りModel::get(['ColumnName'])->toArray();、実行Model::select('ColumnName')->get()->toArray()することは、多次元配列を生成することと同等です。
SamBremner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.