Collection éloquente


Personnaliser les collections

  • Eloquent Return Tous les jeux de résultats multiples sont des IlluminateDatabaseEloquentCollection< Instances d'objets /code>, y compris les résultats récupérés via la méthode get ou obtenus en accédant aux relations. L'objet collection d'Eloquent hérite de la classe de base de collection de Laravel, il hérite donc naturellement également de dizaines de méthodes capables de gérer avec élégance le tableau sous-jacent de modèles Eloquent. De plus, toutes les collections peuvent être utilisées comme itérateurs, et vous pouvez les parcourir comme un simple tableau PHP :
  • $users = App\User::where('active', 1)->get();
    foreach ($users as $user) { 
       echo $user->name;
     }
  • Cependant, les collections sont plus puissantes que les tableaux, exposant des appels chaînables via une interface map/reduce et plus intuitive. d'autres opérations. Par exemple, supprimons tous les utilisateurs inactifs et collectons les noms des utilisateurs restants :
    $users = App\User::all();
    $names = $users->reject(function ($user) { 
       return $user->active === false;
     })->map(function ($user) { 
       return $user->name;
     });
    {note} La plupart des méthodes de collecte Eloquent renvoient de nouvelles instances de collection Eloquent, mais pluck, les exceptions sont les Méthodes keys, zip, collapse, flatten et flip, qui renvoient une collection instance de classe de base. De même, si une opération map renvoie une collection qui ne contient aucun modèle Eloquent, elle est automatiquement convertie en classe de base de collection.

Méthodes disponibles

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

Classe de base de collection

Tous les objets Eloquent héritent de l'objet de collection de base Laravel ; par conséquent, ils héritent également de toutes les méthodes puissantes fournies par la classe de base de collection :

all
average
avg
chunk
collapse
combine
concat
contient
containsStrict
count
crossJoin
dd
diff
diffKeys
dump
each
eachSpre ad
every
sauf
filter
first
flatMap
flatten
flip
forget
forPage
get
le groupe
a
implode
intersection
estVide
isNotEmpty
keyBy
keys
last
map
mapInto
mapSpread
mapToGroups
mapWithKeys
max
median
merge
min
mode
nth
only
pad
partition
pipe
pluck
prepend
pull
push
put
aléatoire
réduire
rejeter
inverse
recherche
shift
shuffle
slice
some
trier
sortBy
sortByDesc
splice
split
sum
take
tap
toArray
toJson
transform
union
unique
uniqueStrict
sauf
valeurs
when
where
whereStrict
whereIn
whereInStrict
whereNotIn
whereNotInStrict
zip

Custom Collection

Si vous devez utiliser une Collection personnalisée dans votre propre méthode d'extension Object, vous pouvez surcharger la méthode newCollection dans votre modèle :

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

rrreee

一旦你定义了 newCollection 方法,任何时候都可以在 Eloquent 返回的模型的 Collection 实例中获得你的自定义集合实例。如果你想要在应用程序的每个模型中使用自定义集合,则应该在所有的模型继承的模型基类中重写 newCollectionUne fois que vous avez défini la méthode newCollection, vous pouvez toujours l'utiliser dans le du modèle renvoyé par Instance Eloquent >Collection pour obtenir votre instance de collection personnalisée. Si vous souhaitez utiliser une collection personnalisée dans chaque modèle de votre application, vous devez remplacer la méthode newCollection dans la classe de base du modèle dont tous les modèles héritent.

Cet article a été publié pour la première fois sur le site LearnKu.com.