クエリビルダーを使用せずに、Laravel 4で新しいEloquentコレクションを作成するにはどうすればよいですか?
オーバーライドできるnewCollection()
メソッドがありますが、実際にはジョブを実行しません。これは、セット結果を照会するときにのみ使用されるためです。
空のコレクションを構築してから、Eloquentオブジェクトでそれを埋めることを考えていました。配列を使用しない理由は、contains
などのEloquent Collectionsメソッドが好きだからです。
他の選択肢があれば、私はそれらを聞いてみたいです。
雄弁ではありません。コレクションに雄弁なモデルを追加するには、いくつかのオプションがあります。
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
受け入れられた回答に追加するために、config/app.php
にエイリアスを作成することもできます
'aliases' => array(
...
'Collection' => Illuminate\Database\Eloquent\Collection::class,
その後、あなたは単にする必要があります
$c = new Collection;
私は実際にnewCollection()
を使用することはより将来の証拠であることを発見しました...
例:
$collection = (new Post)->newCollection();
そうすれば、後の段階でモデル用に独自のコレクションクラスを作成することにした場合(数回行ったように)、モデルのnewCollection()
関数をオーバーライドするだけなので、コードをリファクタリングするのがはるかに簡単です
これは元の質問とは関係ないかもしれませんが、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);
}
}
インジェクションパターンを使用し、$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([]);
...
}