まずお詫びです
コード読んでいたら、この記事で書いたこと間違っていました!!!
訂正記事書きました。
間違い内容
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^)