web-dev-qa-db-ja.com

Laravel 4で新しい空のEloquentコレクションを手動で作成する方法

クエリビルダーを使用せずに、Laravel 4で新しいEloquentコレクションを作成するにはどうすればよいですか?

オーバーライドできるnewCollection()メソッドがありますが、実際にはジョブを実行しません。これは、セット結果を照会するときにのみ使用されるためです。

空のコレクションを構築してから、Eloquentオブジェクトでそれを埋めることを考えていました。配列を使用しない理由は、containsなどのEloquent Collectionsメソッドが好きだからです。

他の選択肢があれば、私はそれらを聞いてみたいです。

35
JofryHS

雄弁ではありません。コレクションに雄弁なモデルを追加するには、いくつかのオプションがあります。

Laravel 5では、ヘルパーの恩恵を受けることができます

$c = collect(new Post);

または

$c = collect();
$c->add(new Post);

OLD Laravel 4 ANSWER

$c = new \Illuminate\Database\Eloquent\Collection;

そして、あなたはできる

$c->add(new Post);

または、makeを使用できます。

$c = Collection::make(new Post);

Laravel 5.現在、グローバル関数collect()を使用しています。

$collection = collect([]); // initialize an empty array [] inside to start empty collection

この構文は非常に簡潔で、数値インデックスが必要ない場合は、次のようにオフセットを追加することもできます。

$collection->offsetSet('foo', $foo_data); // similar to add function but with
$collection->offsetSet('bar', $bar_data); // an assigned index
10
Gokigooooks

受け入れられた回答に追加するために、config/app.phpにエイリアスを作成することもできます

'aliases' => array(

    ...
    'Collection'      => Illuminate\Database\Eloquent\Collection::class,

その後、あなたは単にする必要があります

$c = new Collection;
4
andrewtweber

私は実際にnewCollection()を使用することはより将来の証拠であることを発見しました...

例:

$collection = (new Post)->newCollection();

そうすれば、後の段階でモデル用に独自のコレクションクラスを作成することにした場合(数回行ったように)、モデルのnewCollection()関数をオーバーライドするだけなので、コードをリファクタリングするのがはるかに簡単です

3
Samuel Cloete

Laravel> = 5.5

これは元の質問とは関係ないかもしれませんが、Google検索の最初のリンクの1つであるため、空のコレクションを作成する方法を探している私のような人に役立つと思います。

新しい空のコレクションを手動で作成したい場合は、このようなcollectヘルパーメソッドを使用できます:

$new_empty_collection = collect();

このヘルパーはIlluminate\Support\helpers.phpにあります。

スニペット:

if (! function_exists('collect')) {
    /**
     * Create a collection from the given value.
     *
     * @param  mixed  $value
     * @return \Illuminate\Support\Collection
     */
    function collect($value = null)
    {
        return new Collection($value);
    }
}
2
chebaby

インジェクションパターンを使用し、$this->collection->make([])の後にnew Collection

use Illuminate\Support\Collection;
...
// Inside of a clase.
...
public function __construct(Collection $collection){
    $this->collection = $collection;
}

public function getResults(){
...
$results = $this->collection->make([]);
...
}
1
Victor Aguilar