検索

ホームページ  >  に質問  >  本文

Laravelの2種類のコレクションの違いは何ですか?

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

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

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

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

PHP中文网PHP中文网2755日前610

全員に返信(1)返信します

  • ringa_lee

    ringa_lee2017-05-16 16:48:31

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

    リーリー

    つまり、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
  • キャンセル返事