1
votes

Comment traiter la requête suivante en utilisant Eloquent dans Laravel

Je travaille sur un système de gestion scolaire dans Laravel 5.7. J'ai deux tables.

  1. étudiants
  2. mensual_fees

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'


0 commentaires

3 Réponses :


0
votes

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();


0 commentaires

0
votes

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 .


0 commentaires

2
votes

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!


2 commentaires

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!