Je travaille sur un système de gestion scolaire dans Laravel 5.7. J'ai deux tables.
Ce que je veux, c'est sélectionner les mois avec la valeur 1 en rejoignant le tableau mensual_fees avec étudiants et en donnant une condition sur la table des étudiants . Pour faire simple. Je veux faire la requête suivante de manière éloquente.
SELECT * FROM `students` INNER JOIN `monthly_fees` ON `monthly_fees`.`student_id` = `students`.`id` WHERE `students`.`class` = 'whatever'
3 Réponses :
Pouvez-vous essayer la requête ci-dessous:
DB::select(`students.*`, `monthly_fees.*`) ->from(`students`) ->join(`monthly_fees`, function($join) { $join->on(`monthly_fees.student_id`, `=`, `students.id`); }) ->where(`students.class`, `=`, 'whatever') ->get();
La manière éloquente serait de faire quelque chose comme ceci:
Student::with('monthly_fees')->where('class', 'whatever')->get();
Cela rendra tous les étudiants appartenant à cette classe avec leurs frais mensuels. Vous devrez évidemment vous assurer que vous avez configuré les bonnes relations sur vos modèles Student
et MonthlyFee
.
Pourquoi faire une jointure. Avec Laravel, vous pouvez simplement charger avec impatience et filtrer les résultats par la table de relations ( La manière éloquente ):
Students::whereHas('MonthlyFees', function ($query) { $query->where('months', 1); })->get();
En faisant cela, vous n'auriez que obtient les résultats de Student où la colonne des mois est égale à 1. Ensuite, filtrez simplement les résultats dans une vue en lame comme vous le feriez normalement. J'espère que cela vous aidera!
Appel à la méthode non définie App \ Student :: MonthlyFees ()
Ce n'est pas tout à fait juste! MonthlyFees
fait référence à une relation que vous devez créer! whereHas
recherche les résultats dans la relation, cela signifie que vous pouvez filtrer vos résultats en fonction de la colonne de relation. Cependant, si vous voulez que le filtre résulte de la relation parentale, c'est-à-dire Etudiants
, vous n'avez pas besoin du tout de whereHas
... J'espère que cela a du sens!