Comment créer une nouvelle collection Eloquent dans Laravel 4, sans utiliser Query Builder?)
Il existe une méthode newCollection()
qui peut être remplacée par une tâche qui ne fait pas vraiment le travail car elle est utilisée uniquement lorsque nous interrogons un résultat défini.
Je pensais construire une collection vide, puis la remplir d'objets Eloquent. La raison pour laquelle je n'utilise pas array est parce que j'aime les méthodes de collections Eloquent telles que contains
.
S'il y a d'autres alternatives, j'aimerais les entendre.
Ce n'est pas vraiment Eloquent, pour ajouter un modèle Eloquent à votre collection, vous avez quelques options:
Dans Laravel 5 vous pouvez bénéficier d'un assistant
$c = collect(new Post);
ou
$c = collect();
$c->add(new Post);
OLD Laravel 4 REPONSE
$c = new \Illuminate\Database\Eloquent\Collection;
Et alors tu peux
$c->add(new Post);
Ou vous pouvez utiliser make:
$c = Collection::make(new Post);
À partir de Laravel 5. J'utilise la fonction globale collect()
$collection = collect([]); // initialize an empty array [] inside to start empty collection
cette syntaxe est très propre et vous pouvez également ajouter des décalages si vous ne voulez pas l'index numérique, comme ceci:
$collection->offsetSet('foo', $foo_data); // similar to add function but with
$collection->offsetSet('bar', $bar_data); // an assigned index
Pour ajouter à la réponse acceptée, vous pouvez également créer un alias dans config/app.php
'aliases' => array(
...
'Collection' => Illuminate\Database\Eloquent\Collection::class,
Ensuite, vous devez simplement faire
$c = new Collection;
En fait, j'ai constaté que l'utilisation de newCollection()
était plus durable ...
Exemple:
$collection = (new Post)->newCollection();
Ainsi, si vous décidez de créer ultérieurement votre propre classe de collection pour votre modèle (comme je l’ai déjà fait plusieurs fois), il est beaucoup plus facile de refactoriser votre code, car vous remplacez simplement la fonction newCollection()
dans ton modèle
Cela n’est peut-être pas lié à la question initiale, mais comme c’est l’un des premiers liens de la recherche google, j’ai trouvé cela utile pour ceux qui, comme moi, cherchent à créer une collection vide.
Si vous voulez créer manuellement une nouvelle collection vide , vous pouvez utiliser la méthode d'assistance collect
de cette manière. :
$new_empty_collection = collect();
Vous pouvez trouver cette aide dans Illuminate\Support\helpers.php
fragment:
if (! function_exists('collect')) {
/**
* Create a collection from the given value.
*
* @param mixed $value
* @return \Illuminate\Support\Collection
*/
function collect($value = null)
{
return new Collection($value);
}
}
Il est préférable d’utiliser le modèle d’injection et après $this->collection->make([])
que new Collection
use Illuminate\Support\Collection;
...
// Inside of a clase.
...
public function __construct(Collection $collection){
$this->collection = $collection;
}
public function getResults(){
...
$results = $this->collection->make([]);
...
}