Koleksi yang fasih


Pengenalan
Pengenalan

  • Kaedah yang ada
  • Sesuaikan collections
  • Eloquent Return Semua set hasil berbilang adalah objek IlluminateDatabaseEloquentCollection< Instance of /code>, termasuk hasil yang diambil melalui kaedah get atau diperoleh dengan mengakses perhubungan. Objek koleksi Eloquent mewarisi kelas asas koleksi Laravel, jadi ia secara semula jadi juga mewarisi berpuluh-puluh kaedah yang boleh mengendalikan tatasusunan asas model Eloquent dengan elegan.

Selain itu, semua koleksi boleh digunakan sebagai iterator, dan anda boleh mengulanginya seperti tatasusunan PHP yang mudah:

$users = App\User::where('active', 1)->get();
foreach ($users as $user) { 
   echo $user->name;
 }
Walau bagaimanapun, koleksi lebih berkuasa daripada tatasusunan, dan ia mendedahkan panggilan boleh rantai melalui antara muka yang lebih intuitif. mengurangkan dan operasi lain. Sebagai contoh, mari kita keluarkan semua pengguna yang tidak aktif dan kumpulkan nama pengguna yang tinggal:

$users = App\User::all();
$names = $users->reject(function ($user) { 
   return $user->active === false;
 })->map(function ($user) { 
   return $user->name;
 });
{note} Kaedah pengumpulan Eloquent yang paling fasih mengembalikan contoh koleksi Eloquent baharu, tetapi pluck, Pengecualian adalah kunci, zip, runtuhkan, ratakan dan flip kaedah, yang mengembalikan koleksi A contoh kelas asas. Begitu juga, jika operasi map mengembalikan koleksi yang tidak mengandungi sebarang model Eloquent, ia secara automatik ditukar kepada kelas asas koleksi.

IlluminateDatabaseEloquentCollection 对象的实例,包括通过 get 方法检索或通过访问关联关系获取到的结果。 Eloquent 的集合对象继承了 Laravel 的 集合基类,因此它自然也继承了数十种能优雅地处理 Eloquent 模型底层数组的方法。

而且,所有的集合都可以作为迭代器,你可以像遍历简单的 PHP 数组一样来遍历它们:

<?php
    namespace App;
    use App\CustomCollection;
    use Illuminate\Database\Eloquent\Model;
    class User extends Model{   
     /**
     * 创建一个新的 Eloquent 集合实例对象。
     *
     * @param  array  $models
     * @return \Illuminate\Database\Eloquent\Collection
     */    
     public function newCollection(array $models = [])  
       {   
            return new CustomCollection($models);    
        }
    }

不过,集合比数组更加强大,它通过更加直观的接口暴露出可链式调用的 map /reduce 等操作。例如,让我们移除所有未激活的用户并收集剩余用户的名字:

rrreee

{note} 大多数 Eloquent 集合方法会返回新的 Eloquent 集合实例,但是 pluck, keys, zip, collapse, flattenflip 方法除外,它们会返回一个 集合基类 实例。同样,如果 map

Kaedah yang ada

Kelas Pangkalan Koleksi

Semua objek Eloquent mewarisi objek koleksi Laravel asas; oleh itu, mereka juga mewarisi semua kaedah berkuasa yang disediakan oleh kelas asas koleksi:

semua
average
avg
chunk
collapse
collapse

mengandungi Strict
count
crossJoin
dd
diff
diffKeys
dump
setiap
eachSpre ad
setiap
kecuali
filter
first
flatfget
flatMapten
dapat
kumpulan
telah
meletup
bersilang
isKosong
isNotEmpty
keyBy
keys
last
map
mapInnto
mapSpread
mapToGroups
mapWithKeys
max
median
merge
min
mode
partii
mode
kedua
pad
kedua

pluck
pop
prepend
tarik
tolak
put
rawak
kurangkan
tolak
terbalikkan
cari
shift
shuffle
slice
sesetengah
sort
sortBy
sortByDesc
splice
split
sum
arraytotranstake

kesatuan
unik
unikTegas
melainkan
nilai
bila
dimana
dimanaStrict
whereIn
whereInStrict
whereNotIn
whereNotInStrict
zip





>Koleksi Tersuai anda perlu menggunakan sambungan tersuai objek, anda boleh mengatasi kaedah newCollection dalam model anda: rrreee

Setelah anda menentukan kaedah newCollection, anda sentiasa boleh menggunakannya dalam model yang dikembalikan oleh Contoh fasih >Koleksi untuk mendapatkan contoh koleksi tersuai anda. Jika anda ingin menggunakan koleksi tersuai dalam setiap model dalam aplikasi anda, anda harus mengatasi kaedah newCollection dalam kelas asas model yang diwarisi oleh semua model.
Artikel ini pertama kali diterbitkan di laman web

LearnKu.com

.

Collection 对象,你可以在你的模型中重写 newCollection 方法:

rrreee

一旦你定义了 newCollection 方法,任何时候都可以在 Eloquent 返回的模型的 Collection 实例中获得你的自定义集合实例。如果你想要在应用程序的每个模型中使用自定义集合,则应该在所有的模型继承的模型基类中重写 newCollection