web-dev-qa-db-fra.com

Comment insérer un objet (objet de type modèle) dans un objet de collection dans Laravel à un numéro d'index spécifique?

J'ai lu Code Bright de Dayle Rees pour en savoir plus sur les Eloquent Collections utilisés dans Laravel. J'ai également fait d'autres recherches, mais je n'ai pas trouvé la réponse que je cherchais.

Je veux insérer un objet (objet de type Model) dans un objet Collection à une position spécifique.

Par exemple:

Ceci est la collection retournée

Illuminate\Database\Eloquent\Collection Object
(
    [0] => Attendance Object
        ([present_day] => 1)

    [1] => Attendance Object
        ([present_day] => 2)

    [2] => Attendance Object
        ([present_day] => 4) 

    [3] => Attendance Object
        ([present_day] => 5) 

)

Comme vous pouvez le voir ci-dessus [present_day] ont des valeurs allant de 1 to 5, mais la valeur, 3 est manquant dans la séquence. Maintenant, ce que je veux vraiment faire, c'est que je veux mettre explicitement un nouveau Attendance Object à la position de l'objet de collection de [2] numéro/position d'index, donc en poussant le reste de l'objet Attendance. J'ai vraiment du mal à bien faire les choses. Comment puis-je faire pour que l'objet de collection ci-dessus ressemble à quelque chose comme ci-dessous:

Illuminate\Database\Eloquent\Collection Object
(
    [0] => Attendance Object
        ([present_day] => 1)

    [1] => Attendance Object
        ([present_day] => 2)

    [2] => Attendance Object    // This is where new object was added.
        ([present_day] => 3) 

    [4] => Attendance Object
        ([present_day] => 4) 

    [5] => Attendance Object
        ([present_day] => 5) 

)

Je pense qu'il y a des méthodes qui permettront de faire exactement cela si c'était un tableau. Comme il s'agit d'un Collection, je ne sais pas comment le faire.

Remarque: Je ne veux pas le convertir en tableau et faire l'insertion dans le tableau. Pour une raison quelconque, je veux avoir cette sortie strictement dans l'objet Collection.

15
Nirmalz Thapaz

Pour insérer un élément dans une collection, reportez-vous à cette réponse; Réponse

Fondamentalement, divise la collection, ajoute l'élément à l'index approprié.


Vous pouvez ajouter l'élément au Eloquent\Collection objet avec la méthode add;

$collection->add($item);  // Laravel 4

ou

$collection->Push($item); // Laravel 5 

Vous pouvez ensuite réorganiser la collection à l'aide de la méthode sortBy;

$collection = $collection->sortBy(function($model){ return $model->present_day; });

Cela réorganisera la collection par votre present_day attribut.


Notez que le code ci-dessus ne fonctionnera que si vous utilisez Illuminate\Database\Eloquent\Collection. Si vous utilisez un simple Eloquent\Support\Collection, il n'y a pas de méthode add.

Au lieu de cela, vous pouvez utiliser un décalage de tableau vide, identique à l'insertion d'un nouvel élément dans un tableau normal:

$collection[] = $item;

Ce formulaire fonctionne également sur la version Eloquent de Collection.

14
Matt Burrow

La méthode put définit la clé et la valeur données dans la collection:

$collection = collect(['product_id' => 1, 'name' => 'Desk']);

$collection->put('price', 100);

$collection->all();

// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]
0
stevebaros