Dans Laravel pouvez-vous vérifier pour voir si un objet est une Collection en utilisant l'objet de la clé primaire?
J'ai besoin d'un moyen rapide de savoir si un objet est dans une collection. Je suis en train de construire un modèle où un administrateur peut assigner un Utilisateur à un rôle. La déclaration ci-dessous est essentiellement ce que je suis en train d'accomplir.
EST le rôle avec une valeur de clé primaire de 5 dans cette collection de Rôles.
Ce que je suis en train de faire (évidemment abrutir dans un seul fichier):
<?php
//The user
$user = User::find(1);
//Array of roles the user is associated with. Fetched via a pivot table
$tmpUserRoles = $user->roles->toArray();
//Rebuilds the values from $tmpUserRoles so that the array key is the primary key
$userRoles = array();
foreach ($tmpUserRoles as $roleData) {
$userRoles[$roleData['role_id']] = $roleData;
}
//This loop is used in the view. Once again, this is dumbed down
foreach ($Roles as $role) {
if (isset($userRoles[$role->role_id]) {
echo $user->firstName.' is a '.$role->label;
} else {
echo $user->firstName.' is not a '.$role->label;
}
}
En boucle sur un tableau juste de créer identique d'un tableau avec la clé primaire comme un indice semble comme une grande perte de temps. Est-il un moyen plus facile dans Laravel pour savoir si un objet est contenu dans une collection en utilisant l'objet de la clé primaire?
OriginalL'auteur TheNatureBoy | 2014-11-05
Vous devez vous connecter pour publier un commentaire.
Utilisation
$tmpUserRoles->contains(5)
pour vérifier si la clé primaire5
existe dans votre collection.(Voir http://laravel.com/docs/4.2/eloquent#collections)
->has()
, par exemple$tmpUserRoles->has(5)
laravel.com/docs/5.1/collections#method-hasOriginalL'auteur damiani
La réponse sélectionnée dirait qu'il travaille.
Si vous voulez un moyen plus lisible de tester si un objet est une instance de la laravel classe de collection (ou toute la classe en général), vous pouvez utiliser le php
is_a()
fonction:Ce n'est pas faire le constat que vous avez aussi envie de faire dans votre question, la description, mais il pourrait être utile en général.
Illuminate\Support\Collection
var_dump( is_a( User::active()->get(), 'Illuminate\Support\Collection') ); // true var_dump( is_a( User::pluck('id'), 'Illuminate\Support\Collection') ); // true
OriginalL'auteur Chris Schmitz