J'ai trois classes Étudiant, Session et Étudiants, il a une relation (Étudiant avec inscription, Session avec inscription et Classe d'étudiant avec inscription), quand je fais un écho, il montre le résultat [{"id": 1, "school_id": 1, "class_id": 1, "student_id": 1, "session_id": 1, "created_at": null, "updated_at": null}], j'ai choisi la valeur de la classe d'étudiants
public function studentclass() { return $this->belongsTo(StudentClass::class); }
Notez que cela fonctionne
idem depuis la session, cela fonctionne également, mais quand je suis sorti de la classe d'étudiants et que j'ai besoin de class_name, cela ne montre pas d'erreur mais pas la valeur extraite de studentclass ici, c'est le même type de requête dans blade.php
public function enrollments() { return $this->hasMany(Enrollement::class); }
voici la relation un à plusieurs dans StudentClass Controller
{{implode(',',$en->studentclass()->get()->pluck('class_name')->toArray())}}
Classe d'inscription
{{implode(',',$en->school()->get()->pluck('school_name')->toArray())}}
comment choisir la valeur nom_classe de la table en utilisant cette relation. merci
3 Réponses :
Vous pouvez extraire la colonne de la relation en utilisant une simple notation .
comme indiqué ci-dessous.
{{ implode(',', $en->studentclass()->pluck('studentclass.class_name')->toArray()) }}
Ici, elle se forme comme, relation
. colonne
{{$ en-> school () -> pluck ('school_name') -> implode (',')}} ou {{implode (',', $ en-> school () -> get () -> pluck ('school_name') -> to Array ())}} Les deux fonctionnent mais cela ne fonctionne pas pour choisir le nom de la classe à partir de la fonction studentclass même si la relation est OK, si je fais écho au $ en, il obtient l'id de la classe de la classe d'inscription
echo $ fr affiche le résultat suivant [{"id": 1, "school_id": 1, "class_id": 1, "student_id": 1, "session_ id": 1, "created_at": n ull, " updated_at ": nul l}] cela signifie que nous avons class_id pourquoi nous ne pouvons pas choisir le class_name en utilisant la fonction de relation studentclass dans le modèle d'inscription
Tout d'abord, notez que vous pouvez utiliser la méthode implode
sur la méthode illuminate / collection:
$en = Enrollment::with('studentclass.enrollments')->where('id', $id)->first();
qui peut être raccourcie en
{{ $en->load('studentclass.enrollments')->studentclass->pluck('enrollments.class_name')->implode(', ') }}
La classe d'étudiants peut être sélectionnée comme ceci
{{ $en->studentclass->pluck('enrollments.class_name')->implode(', ') }}
en utilisant la syntaxe de point pour accéder au nom de la classe.
pour éviter cela de créer un problème n + 1 et de réduire le nombre de requêtes exécutées, vous devez charger la relation paresseusement:
{{ $en->school->pluck('school_name')->implode(', ') }}
vous pouvez également la charger à l'avance:
XXX
{{$ en-> school () -> pluck ('school_name') -> implode (',')}} ou {{implode (',', $ en-> school () -> get () -> pluck ('school_name') -> to Array ())}} Les deux fonctionnent mais cela ne fonctionne pas pour choisir le nom de la classe à partir de la fonction studentclass même si la relation est OK, si je fais écho au $ en, il obtient l'id de la classe de la classe d'inscription
echo $ fr affiche le résultat suivant [{"id": 1, "school_id": 1, "class_id": 1, "student_id": 1, "session_ id": 1, "created_at": n ull, " updated_at ": nul l}] cela signifie que nous avons class_id pourquoi nous ne pouvons pas choisir le class_name en utilisant la fonction de relation studentclass dans le modèle d'inscription
Si vous voyez le deuxième exemple dans ma réponse, il montre comment y parvenir.
J'ai changé la fonction Studentclass dans le modèle d'inscription
{{implode(',',$en->studentclass()->get()->pluck('class_name')->toArray())}}
simplement en ajoutant «id» et en retirant de la vue
public function studentclass() { return $this->belongsTo(StudentClass::class,'id'); }