Laravelの2種類のコレクションの違いは何ですか?
PHP中文网
PHP中文网 2017-05-16 16:46:31
0
1
596

Eloquent のクエリ結果は IlluminateDatabaseEloquentCollection,而使用 collect() 会返回 IlluminateSupportCollection を返します。さらに、Laravel のドキュメントには次の情報があります:

ほとんどの Eloquent コレクションは新しい「Eloquent コレクション」インスタンスを返しますが、pluck、keys、zip、collapse、 flatten、flip メソッドは基本コレクション インスタンスを返します。

同様に、マップ操作が Eloquent モデルを含まないコレクションを返す場合、それは自動的に基本コレクションに変換されます。

それでは、これら 2 つのコレクション、つまり「Basic Collection」と「Eloquent Collection」の違いは何でしょうか?

PHP中文网
PHP中文网

认证0级讲师

全員に返信(1)
左手右手慢动作

ソースコードを見ると、次のことが分かります

リーリー

つまり、IlluminateDatabaseEloquentCollectionIlluminateSupportCollectionのサブクラスです。

あなたが挙げた方法はIlluminateDatabaseEloquentCollection中是这样定义的,以pluck例えばです。

リーリー

そして toBase函数在IlluminateDatabaseEloquentCollection中没有定义,而是在IlluminateSupportCollection中定义了。那么在子类中没有重写的方法,就会调用父类的方法。我们看看toBaseIlluminateSupportCollection で使用される定義はここでどのように使用されますか。

リーリー

ほら、戻ってきましたnew self($this),一个新的实例。由于这是在父类中的,自然返回的实例是IlluminateSupportCollection了。IlluminateSupportCollection中的pluck定義はこんな感じです。

リーリー

そしてIlluminateSupportArrpluckの定義はこれです。

リーリー

返されるのは配列です。
これの違い IlluminateSupportCollection中的new static(Arr::pluck),意思就是新建一个类的实例(new selfnew static は https://www.laravist.com/blog/post/php-new-static-and-new-self) でご覧いただけます。

どうでしょう、分かりましたか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート