Laravel 6

[Laravel 7] Récupérer le nom des enregistrements non présent dans ma requête SQL

Avatar de dadub
dadub

Bonjour,

J'ai écris une requête SQL qui récupère des informations dans plusieurs tablas à partir de l'id d'une plante :

$informations_plante = DB::table('herbs')
            ->select('herbs.name as hname', 'herbs.sciname', 'herbs.id as herbid','hinteractions.id as hinteractionid','hinteractions.note as hinteractionnote','hinteractions.force_id','targets.name as targetname', 'forces.name as force_name')
            ->leftJoin('hinteractions', 'herbs.id', '=', 'herb_id')
            ->leftJoin('forces', 'forces.id', '=', 'force_id')
            ->leftJoin('targets', 'targets.id', '=', 'hinteractions.target_id')->where('herbs.id', $id)
            //add here a subquery to select effects.name from hinteractions_has_effects with hinteractions.id
            ->get();

La requête générée me donne ceci :

select `herbs`.`name` as `hname`, `herbs`.`sciname`, `herbs`.`id` as `herbid`, `hinteractions`.`id` as `hinteractionid`, `hinteractions`.`note` as `hinteractionnote`, `hinteractions`.`force_id`, `targets`.`name` as `targetname`, `forces`.`name` as `force_name` from `herbs` left join `hinteractions` on `herbs`.`id` = `herb_id` left join `forces` on `forces`.`id` = `force_id` left join `targets` on `targets`.`id` = `hinteractions`.`target_id` where `herbs`.`id` = 6

et le résultat obtenu est le suivant :

https://www.dropbox.com/s/ac2i79ig2vgc4qj/Capture%20d%27%C3%A9cran%202020-05-23%2020.45.24.png?dl=0

J'aimerais afficher le nom effects qui se trouvent dans cette table :

https://www.dropbox.com/s/syxqqyd1xxl5uo9/Capture%20d%27%C3%A9cran%202020-05-23%2021.06.37.png?dl=0

En passant par cette table (j'ai l'id des hinteractions) :

https://www.dropbox.com/s/f7atybenn3vzkmy/Capture%20d%27%C3%A9cran%202020-05-23%2021.07.37.png?dl=0

Je ne vois pas comment je peux faire avec la requête SQL ci-dessus.

Est-ce que je dois ajouter une sous-requête ?

Merci d'avance pour l'aide.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Ne faut-il par rajouter simplement:

->select(...,'effects.name as effname')
->leftJoin('hinteraction_has_effects ', 'hinteraction_has_effects.hinteraction_id', '=', 'hinteractionid')
->leftJoin('effects ', 'effects .id', '=', 'hinteraction_has_effects.effect_id')

Ce qui donne donc:

$informations_plante = DB::table('herbs')
            ->select('herbs.name as hname', 'herbs.sciname', 'herbs.id as herbid','hinteractions.id as hinteractionid','hinteractions.note as hinteractionnote','hinteractions.force_id','targets.name as targetname', 'forces.name as force_name','effects.name as effname')
            ->leftJoin('hinteractions', 'herbs.id', '=', 'herb_id')
            ->leftJoin('forces', 'forces.id', '=', 'force_id')
            ->leftJoin('targets', 'targets.id', '=', 'hinteractions.target_id')
            ->leftJoin('hinteraction_has_effects ', 'hinteraction_has_effects.hinteraction_id', '=', 'hinteractionid')
            ->leftJoin('effects ', 'effects .id', '=', 'hinteraction_has_effects.effect_id')
            ->where('herbs.id', $id)
            ->get();
Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.