Lors de l'utilisation, ->get()
vous ne pouvez pas simplement utiliser l'un des éléments suivants:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Parce que si vous dd($result);
remarquez qu'une instance de Illuminate\Support\Collection
est toujours renvoyée, même en l'absence de résultats. Essentiellement, ce que vous vérifiez, c'est $a = new stdClass; if ($a) { ... }
ce qui restera toujours vrai.
Pour déterminer s'il existe des résultats, vous pouvez effectuer l'une des opérations suivantes:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Vous pouvez également utiliser à la ->first()
place de ->get()
sur le générateur de requêtes qui retournera une instance du premier modèle trouvé, ou null
autrement. Ceci est utile si vous avez besoin ou n'attendez qu'un seul résultat de la base de données.
$result = Model::where(...)->first();
if ($result) { ... }
Notes / Références
Informations sur les bonus
Les différences Collection et Query Builder peuvent être un peu déroutantes pour les nouveaux venus de Laravel car les noms de méthode sont souvent les mêmes entre les deux. Pour cette raison, il peut être déroutant de savoir sur quoi vous travaillez. Le Query Builder construit essentiellement une requête jusqu'à ce que vous appeliez une méthode où il exécutera la requête et frappera la base de données (par exemple lorsque vous appelez certaines méthodes comme ->all()
->first()
->lists()
et d'autres). Ces méthodes existent également sur l' Collection
objet, qui peut être renvoyé par le générateur de requêtes s'il existe plusieurs résultats. Si vous ne savez pas avec quelle classe vous travaillez réellement, essayez de faire var_dump(User::all())
et d'expérimenter pour voir quelles classes il retourne réellement (avec l'aide deget_class(...)
). Je vous recommande fortement de consulter le code source de la classe Collection, c'est assez simple. Ensuite, consultez le Générateur de requêtes et voyez les similitudes dans les noms de fonction et découvrez quand il atteint réellement la base de données.
first()
, le résultat est différent deget()
, ce qui peut être vérifié avec!$result
comme résultat vide estnull
Model::first()
qu'il agit en fait sur la "première" méthode du générateur de requêtes et NON sur la collection, donc il choisira la première de la base de données - maisModel::get()
retournera une instance de Illuminate \ Support \ Collection donc si vous l'avez fait$r = Model::get()
et ensuite$r->first()
il sélectionnera le premier élément de cette collection.count($result)
fonctionne; l'ajout de ce détail serait une amélioration.foreach
boucle, puis utiliser l'une de ces vérifications (pensez:)count($collection->column)
.Je pense que vous cherchez:
Ceci est différent de
empty($result)
, ce qui ne sera pas vrai car le résultat sera une collection vide. Votre suggestioncount($result)
est également une bonne solution. Je ne trouve aucune référence dans la documentationla source
J'accepte la réponse approuvée ci-dessus. Mais généralement j'utilise la
$results->isNotEmpty()
méthode indiquée ci-dessous.C'est plus verbeux que
if(!results->isEmpty())
parce que parfois on oublie d'ajouter '!' devant ce qui peut entraîner une erreur indésirable.Notez que cette méthode existe à partir de la version 5.3 .
la source
Il existe plusieurs méthodes données dans Laravel pour vérifier le nombre de résultats / vérifier vide / non vide:
la source
Je pense qu'il vaut mieux utiliser
la source
Je pense que vous essayez quelque chose comme
ou aussi utiliser
la source
Tu peux faire
compter les résultats.
Vous pouvez aussi utiliser
pour vérifier si le résultat est vide ou non.
la source
Selon la documentation de Laravel , vous pouvez utiliser cette méthode:
La
isEmpty
méthode retournetrue
si la collection est vide; sinon,false
est retourné.la source
donc Laravel retourne en fait une collection lorsque
Model::all();
vous l' utilisez, vous ne voulez pas une collection, vous voulez un tableau, vous pouvez donc taper set.(array)Model::all();
alors vous pouvez utiliser array_filter pour retourner les résultatscela vous permettra également de faire des choses comme
count()
.la source
------ RÉSOLU ------
dans ce cas, vous voulez vérifier deux types de comptage pour deux cace
cas 1:
si le résultat contient un seul enregistrement autre mot sélectionner une seule ligne de la base de données en utilisant -> first ()
cas 2:
si le résultat contient un ensemble de plusieurs lignes, un autre mot utilisant -> get () ou -> all ()
la source
Vous pouvez utiliser:
$counter = count($datas);
la source