1
votes

Méthode Pluck and Implode à Laravel?

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


0 commentaires

3 Réponses :


0
votes

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


2 commentaires

{{$ 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



0
votes

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


3 commentaires

{{$ 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.



0
votes

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');
    }


0 commentaires