エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】Collectionのpluckのreturn値が異なるパターン【462日目】

まずお詫びです

コード読んでいたら、この記事で書いたこと間違っていました!!!

訂正記事書きました。

www.nyamucoro.com

間違い内容

EloquentのCollectionと、SupportのCollectionが異なるのは間違いないですが、
このpluckの違いは大きく差はなく、
Eloquent側はtoBase関数によって、Support側のpluckを呼び出しています。
new staticを使っているために、Support側の関数を素直に呼べてないのか・・・?
と推測していますが、詳しくはまだ読めていないです、すみません!

以下旧記事です、、、

Collectionには種類がある

Collection、Laravelで使う配列の代わりに使える便利なやつですね!

これ、モデルで扱ったりとか、いろいろ使う場面があるのですが。

実は、Collectionにも種類があるんです。

普通のCollectionとEloquentのCollection

Illuminate/Database/Eloquent/Collection.php

Illuminate/Support/Collection.php

Eloquentでクエリビルダとか使ってgetするときに出てくるやつと、new Collectionとか使って配列を変換するときと。

ちなみに、Eloquentで作るCollectionは、SupportのCollectionを継承しています。

pluckの違い

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php

    /**
     * Get an array with the values of a given key.
     *
     * @param  string  $value
     * @param  string|null  $key
     * @return \Illuminate\Support\Collection
     */
    public function pluck($value, $key = null)
    {
        return $this->toBase()->pluck($value, $key);
    }

vendor/laravel/framework/src/Illuminate/Support/Collection.php

    /**
     * Get the values of a given key.
     *
     * @param  string  $value
     * @param  string|null  $key
     * @return static
     */
    public function pluck($value, $key = null)
    {
        return new static(Arr::pluck($this->items, $value, $key));
    }

元コード。あれ?まさかの・・・?

配列を返すのと、Collectionを返すのと。

実は、Eloquentの方はpluckで継承元のpluckを返します。

そして、元のCollectionは配列を返す・・・のです(;・∀・)

うっかりしてると、異なる返り値が返ってきて焦りますね。

お気をつけくださいorもしこれが良くないと思ったらプルリクどうぞ(^o^)

元コード

github.com

github.com