web-dev-qa-db-ja.com

Laravel Eloquent Collection配列にキーと値のペアを付加する方法は?

私はデータベースから何かをフェッチしています:

$foo = $this->fooRepository->all()->lists('name', 'id');

私は得る:

Collection {#506 ▼
  #items: array:9 [▼
    "9c436867-afe9-4234-a849-253aea4f602c" => "aaa"
    "d250102b-1370-40d0-99c5-7e5bfd0a15e4" => "sss"
    "7342f212-083b-458d-8af8-24986bbb627d" => "ddd"
    "029c53ce-dc16-49fd-8d83-9d8270d9ff37" => "fff"
    "3add6a37-72e2-4054-853e-9ed8addbf3ea" => "ggg"
    "28f5a9ac-014e-4f22-bda8-e2d5b1f48273" => "hhh"
    "94fccb2c-d732-4369-9bf7-78925797e578" => "jjj"
    "5b494994-93f0-406e-b420-aceb7b6111d7" => "kkk"
    "22a7824a-c6eb-45e7-b9c5-e40c134e3ac8" => "lll"
  ]
}

完璧です。このコレクションは後でForm::selectに渡され、選択/オプションのドロップダウンに入力されます。

このコレクションの前に別のキーと値のペアを追加します。キーは空の文字列で、値には「何かを選択してください」のようなテキストが含まれます。

追加できます:

$foo[''] = 'Choose something…';

だから私は得る

Collection {#506 ▼
  #items: array:10 [▼
    "9c436867-afe9-4234-a849-253aea4f602c" => "aaa"
    "d250102b-1370-40d0-99c5-7e5bfd0a15e4" => "sss"
    "7342f212-083b-458d-8af8-24986bbb627d" => "ddd"
    "029c53ce-dc16-49fd-8d83-9d8270d9ff37" => "fff"
    "3add6a37-72e2-4054-853e-9ed8addbf3ea" => "ggg"
    "28f5a9ac-014e-4f22-bda8-e2d5b1f48273" => "hhh"
    "94fccb2c-d732-4369-9bf7-78925797e578" => "jjj"
    "5b494994-93f0-406e-b420-aceb7b6111d7" => "kkk"
    "22a7824a-c6eb-45e7-b9c5-e40c134e3ac8" => "lll"
    "" => "Choose something…"
  ]
}

しかし、コレクションの最初の要素としてどのように移動できるかはわかりません。配列ではなくarray_mergeのインスタンスを処理しているため、Illuminate\Database\Eloquent\Collectionを使用できないため、 この回答 は機能しません。

ヒントはありますか?ありがとう。

10
Matt Komarnicki
$foo = ['' => 'Choose something…'] + $foo->all();

もしあなたの $fooはコレクションインスタンスである必要があり、コレクションで再度ラップするだけです。

$foo = collect(['' => 'Choose something…'] + $foo->all());

私はlaravelにPRを提出しました キーをprependに渡すことができるようにします。 Laravel 5.1.24以降を使用している場合は、次のことができます。

$foo = $this->fooRepository->all()
            ->lists('name', 'id')
            ->prepend('Choose something…', '');

それ以降のバージョンのLaravelは、listsメソッドの名前をpluckに変更しました。比較的新しいバージョンのLaravelを使用している場合は、代わりにpluckを使用してください。 :

$foo = $this->fooRepository->all()
            ->pluck('name', 'id')
            ->prepend('Choose something…', '');
32
Joseph Silber

->prepend()を使用してみてください

http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Collection.html#method_prepend

$foo->prepend('Choose Something')

これでは正しい結果が得られません。インデックスは0空の文字列の代わりに。代わりに、このようなことを試すことができます

$foo = $foo->reverse()->put('Choose Something')->reverse()

しかし、@ JosephSilberの回答を使用する方がおそらく良いでしょう。

2
EspadaV8