Laravel - éloquent «a», «avec», «wherehas»

Laravel - éloquent «a», «avec», «wherehas»

Problème

a, avec et Où est peut parfois être déroutant pour les développeurs débutants. Donnons une certaine perspective sur ce que chacun de ces signifiait

Solution

avec() est généralement utilisé avec un chargement impatient, ce qui est un moyen rapide de tirer des modèles connexes. Fondamentalement, cela signifie que, avec le modèle principal, Laravel préchargera la ou les relations répertoriées (s). Ceci est bénéfique lorsque vous devez charger des données supplémentaires et que vous souhaitez éviter de faire N + 1 DB BAD PRATIQUES. Avec un chargement impatient, vous ne faites qu'une seule requête DB supplémentaire au lieu de potentiellement des centaines de requêtes supplémentaires.

Exemple:

Utilisateur> Hasmany> Organisation
$ utilisateurs = utilisateur :: avec ('organisations') -> get ();
foreach ($ utilisateurs comme $ utilisateur)
$ utilisateurs-> organisations; // Les messages sont déjà chargés et aucune requête DB supplémentaire n'est exécutée

A

a() est utilisé pour filtrer le modèle de sélection en fonction de la relation sélectionnée. C'est essentiellement une méthode de relations. Si vous utilisez juste a («organisation»), En utilisant le même exemple d'utilisateurs et d'organisations, cela signifierait que cela attirera tous les utilisateurs qui ont au moins une organisation dans leur «portefeuille».

Exemple:

Utilisateur> Hasmany> Organisation
$ users = user :: has ('organisations') -> get ();
// Seuls les utilisateurs qui ont au moins une organisation dans leur portefeuille sont
contenu dans la collection

Où est

Où est() est presque le même que a(). Il vous permet simplement de spécifier des filtres supplémentaires pour le modèle connexe.

Exemple:

Utilisateur> Hasmany> Organisation
$ utilisateurs = utilisateur :: wherehas ('organisations', fonction ($ q)
$ q-> Où ('Created_at', '> =', '2020-01-01 00:00:00');
) -> get ();
// Seuls les utilisateurs qui ont des organisations créés au début de 2020 sont retournés