開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel5.7】Eloquent Collectionの使い方(find,add)

【Laravel5.7】Eloquent Collectionの使い方(find,add)

こんにちは。
ニシザワです。

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
        ]); //モデルが追加されます。
    */
本日はここまでとします。 ありがとうございました。
TOPに戻る