J'ai lu Code Bright de Dayle Rees pour en savoir plus sur les Eloquent Collection
s 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
.
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
.
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]