【Laravel5.7】Eloquent Collectionの使い方(find,add)
こんにちは。
ニシザワです。
Eloquent Collectionの使い方の個別記事です。
まとめ記事は こちら
2.$keyがArrayable(Collection等)やarrayだった場合は
・空の場合は空のCollectionを返しています。
・空ではない場合はPrimary Key(ID)が$keyの中に含まれているものだけを入れてCollectionを返しています。
3.$keyが上記以外の場合はPrimary Key(ID)と比較して,Modelインスタンスまたはdefault値を返しています。
Modelインスタンスの型指定がないですがここは暗黙的にModelインスタンスを入れたほうがいいでしょう。
ニシザワです。
Eloquent Collectionの使い方の個別記事です。
まとめ記事は こちら
find($key, $default = null) : Model|Collection
Laravelのソースと解説
/**
* Find a model in the collection by key.
*
* @param mixed $key
* @param mixed $default
* @return \Illuminate\Database\Eloquent\Model|static
*/
public function find($key, $default = null)
{
if ($key instanceof Model) {
$key = $key->getKey();
}
if ($key instanceof Arrayable) {
$key = $key->toArray();
}
if (is_array($key)) {
if ($this->isEmpty()) {
return new static;
}
return $this->whereIn($this->first()->getKeyName(), $key);
}
return Arr::first($this->items, function ($model) use ($key) {
return $model->getKey() == $key;
}, $default);
}
1.$keyがModelインスタンスだった場合は $keyはModelのPrimary key(ID)を取得しています。2.$keyがArrayable(Collection等)やarrayだった場合は
・空の場合は空のCollectionを返しています。
・空ではない場合はPrimary Key(ID)が$keyの中に含まれているものだけを入れてCollectionを返しています。
3.$keyが上記以外の場合はPrimary Key(ID)と比較して,Modelインスタンスまたはdefault値を返しています。
findの使い方
1.$keyがModelインスタンスだった場合
$models = Collection::make([
$model1 = new Model(), //id = 1
$model2 = new Model() //id = 2
]);
$model = new Model(); //id = 1
$find = $models->find($model);
/*
$find //Primary Key(ID)が1のModelが返ってくる
*/
2.$keyがArrayable(Collection等)やarrayだった場合
$models = Collection::make([
$model1 = new Model(), //id = 1
$model2 = new Model(). //id = 2
$model2 = new Model() //id = 3
]);
$model = new Model(); //id = 1
$find = $models->find([]);
/*
$find //空のCollectionになる
*/
$find = $models->find([1,2]);
//または
$find = $models->find(collect([1,2]));
/*
$find = Collection::make([
$model1, //id = 1
$model2 //id = 2
]); //Primary Key(ID)が1または2のものだけが残る
*/
$find = $models->find(2);
/*
$find //Primary Key(ID)が2のModelが返ってくる
*/
add(Model $item) : Collection
Laravelのソースと解説
/**
* Add an item to the collection.
*
* @param mixed $item
* @return $this
*/
public function add($item)
{
$this->items[] = $item;
return $this;
}
$itemをCollectionの中に入れているだけです。Modelインスタンスの型指定がないですがここは暗黙的にModelインスタンスを入れたほうがいいでしょう。
addの使い方
$models = Collection::make([
$model1 = new Model(), //id = 1
$model2 = new Model() //id = 2
]);
$model = new Model(); //id = 3
$added = $models->find($model);
/*
$find = Collection::make([
$model1, //id = 1
$model2, //id = 2
$model, //id = 3
]); //モデルが追加されます。
*/
本日はここまでとします。 ありがとうございました。