J'ai hérité d'un projet Laravel et je travaille toujours sur le fait de l'apprendre. Je vois dans le code il y a un chèque pour exécuter un bloc uniquement si le est-ce redondant ou vide et comptez () vérifiant 2 choses séparées? P>
Edit: corrigé à partir de $ patient-> enregistrements code> est là mais vérifiez qu'il est: P>
si (! vide ($ patient-> enregistrements) && $ patient-> enregistrements-> comptez ()> 0) code> p> p>
> 1 code> à > 0 code> p>
3 Réponses :
Je pense que c'est redondant. $ Patient-> Les enregistrements sont une collection.
J'utilise comme ça.
Je recommanderais si ($ patient-> enregistrements-> isnotempty ()) {...} code> Comme il s'agit de la solution la plus lisible et n'implique pas la coulée implicite de Int à bool pour le si.
Dépend de la manière dont le patient $ est créé. Dans certains cas, $ Patient-> enregistrements pourrait être null code> et non une collection, et donc la vérification de l'émetteur () ou! vide peut être nécessaire et non redondant du tout.
@Jastreich si enregistre code> est une relation qui peut avoir plusieurs modèles associés (HASMANY ,OPTOMANY, etc.), alors il sera toujours b> une collection, même s'il n'y a pas de enregistrements associés. Si $ patient code> est créé de manière à ce que la relation d'enregistrement n'est pas disponible, il s'agit d'un problème de cette variable et non liée à cette question.
Pas dans toutes les versions. J'ai eu des relations return null code> à Laravel 5.2. Quelque chose de 5,4 et plus, je ne l'ai pas vu arriver.
Vous pouvez toujours utiliser si (facultatif ($ ($) -> isnotempty ()) {...} code> Si vous souhaitez le faire null code> coffre-fort. :)
Ou simplement vérifier NULL, comme le parent suggéré, et ne pas ajouter un autre enregistrement d'activation de la fonction à la pile. Parce que en option () code> appelle simplement les mêmes fonctions système que nous utiliserions.
C'est bien sûr vrai, mais dans ce cas, la pile est apparue juste après isnotempty () code>. Donc, ce n'est pas une grande quantité d'une question et plus une question de goût je suppose.
@ J.a.streich Je viens de vérifier une nouvelle version de 5.2 et de créer une relation de test pour Hasmany et de l'appartenance. Tous deux ont renvoyé une collection vide. Je soupçonne que vos relations n'étaient pas correctement configurées, pas le cadre n'était pas incompatible.
C'est un vieux code et des œuvres;) ... Il suffit de vérifier le projet que je pensais et que le cas d'utilisation est différent de ce que je me souviens. Il est dans la forme partielle de la forme. Ce qui est utilisé dans la base de création et de modification, où le modèle d'origine peut ou non être défini. Donc, les chèques sont de voir si les champs (relations) existent réellement vérifier si l'objet lui-même est vraiment défini ou non.
Je crois que Isnotempty est meilleur parce que Laravel fait une vérification si le tableau à l'intérieur de la collection n'est pas vide (! Vide ($ ceci-> éléments)) ... la fonction PHP vide Retour Faux pour NULL, String vide, Vide Array, 0, 0, '0' ... et ainsi de suite ... N'importe aussi si la variable est une collection, une array ou une null ... php.net/manual/fr/funcky.empty.php
S'il est possible que $ patient ou dossier (supposé être une propriété de patiente $) puisse être indéfini, alors le avec Le vide vérifie que $ patient-> enregistrements est défini et non vide, tandis que la partie de comptage () de la clause est une vérification plus spécifique du résultat de la méthode de comptage. Cette méthode n'est pas disponible dans le cas où $ patient ou enregistrements est indéfini. P> vide ($ patient-> enregistrements) code> est utile car $ > Records-> Count () En lui-même entraînerait une erreur fatale:
Erreur non capturée: appelez à une fonction de membre () sur NULL in ... code> p>
vide ($ patient-> enregistrements) code> Dans la clause IF, cette erreur fatale peut être évitée, même dans le cas où un patient ou des enregistrements est indéfini. p>
Peut être, avant de vérifier la longueur de la collection, il souhaitait s'assurer que ce n'est pas Qu'est-ce qui pourrait être une meilleure solution forte> p>
Vous pouvez simplement utiliser cette même condition en supprimant la partie de contrôle vide ci-dessous: P>
Pour le rendre plus lisible, Laravel Collection nous offre une très belle méthode appelée C'est ce que je préfère utiliser. Parce que nous écrivons du code pour la rendre lisible à d'autres programmeurs / États-Unis, pas pour ordinateur. L'ordinateur peut même comprendre binaire mais nous n'écrivons pas binaires. p> null code> bien que je préfère utiliser is_null () code> ou isset () code> méthode plutôt dans ce cas. Même si cela (null coffre-fort) était dans son esprit, il est toujours inutile. Parce que si la relation entre patient code> et enregistreurs code> définit correctement (une à plusieurs => hasmany () code>) puis $ patient-> enregistrements code> retournera toujours une collection mais jamais nulle. Même si c'est une collection vide, vous pouvez toujours utiliser la méthode comptez () code> en toute sécurité sans même vérifier si les enregistrements code> code> sont nuls ou non parce que cela ne va jamais être null si nous retournons un hasmany () code> relation. p>
si ($ patient-> enregistrements-> comptez ()> 0) code> p>
isnotempty () code>: p>
si ($ patient-> enregistrements-> isnotempty ()) code> p>
Cela devrait produire une erreur de syntaxe.
Intéressant..qui est-ce?
À moins que Laravel fait quelque chose de vissage, PHP n'utilise pas la notation de points.
@Monkeyzeus probablement pas une erreur de syntaxe, qui vient d'interpréter comme une concaténation.
En tout cas, vous devez lire les documents pour comprendre
vide () code>: php.net/manual/fr/funcky.empty.phpMes excuses. Je suis toujours dans un cadre d'esprit rubis - je l'ai copié au-dessus. C'est
-> comptez () code>Cela dépend de la relation. Si c'est un
hasone code>$ patient-> enregistrements code> pourrait être null. Dans ce cas, ometter la vérification vide entraînerait une méthode d'appel d'erreurcompte code> sur null.