0
votes

Relation nichée Laravel

L'utilisateur peut avoir de nombreux appareils et chaque périphérique peut avoir de nombreuses interfaces.

Je souhaite obtenir l'utilisateur avec ses appareils et les interfaces de chaque périphérique. P>

Modèle utilisateur Strong> P>

Auther::user()->devices->interfaces


0 commentaires

3 Réponses :


0
votes

Vous voudrez regarder le HasmanyTathrough relation.

La relation "HAS-TIX" offre un raccourci pratique pour accéder aux relations distantes via une relation intermédiaire. Par exemple, un modèle de pays peut avoir de nombreux modèles de poste via un modèle utilisateur intermédiaire. Dans cet exemple, vous pouvez facilement collecter tous les poteaux de blog pour un pays donné.

quelque chose sur ces lignes sur votre modèle utilisateur: xxx

car votre utilisateur a de nombreuses interfaces à travers leurs appareils.


4 commentaires

Je dois donc modifier la interface pour appartenir à app \ périphérique et app \ utilisateur ? À l'heure actuelle, il n'appartient qu'à app \ périphérique


@Antoniostsimourtos n ° Les interfaces appartiennent aux périphériques. Les appareils appartiennent aux utilisateurs. Ainsi, les interfaces appartiennent aux utilisateurs à travers leurs appareils. La relation hasmanyTathrough comprend ce type de relation imbriquée et peut donc être utilisé pour faire exactement ce que vous voulez.


Merci pour l'explication! C'est ce que je veux réellement atteindre. Donc, je dois mettre la ligne de code unique sur mon modèle utilisateur? Quelque chose devrait-il être changé sur les migrations? Pourriez-vous s'il vous plaît éditer votre réponse et écrire le (s) modèle (s) changements (s)?


@Antoniostsimourtos Veuillez lire le lien vers la documentation que j'ai incluse. Il comprend une exemple de structure de base de données et tous les détails nécessaires à la mise en œuvre.



0
votes

Vous pouvez boucler les périphériques et obtenir des interfaces pour chaque périphérique.

foreach(Auth::user()->devices as $device)
{
   foreach($device->interfaces as $interface)
   {
       // do whatever you want
   }
}


2 commentaires

Oui mais je ne veux pas obtenir les objets réels que le nombre de tous les interfaces $ donc je veux éviter l'itération de la boucle


Ensuite, vous devez utiliser hasmanyTathrough puis utiliser compteur () .



0
votes

Vous pouvez utiliser:

$id = Auth::user()->id;

$userwithDetails = User::with('devices', 'devices.interfaces')->where('id', $id)->first();


0 commentaires