IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Faire une requête sur table pivot


Sujet :

Laravel PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Je me pose des questions
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Je me pose des questions

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut Faire une requête sur table pivot
    Bonjour à vous tous,

    J'aurais besoin de votre aide concernant une requête sur une table "pivot".

    J'ai donc 4 tables :

    records : (Sont les titres enregistrés) avec une relation "band_id"
    bands : ( Qui me donne les nom du groupe) en relation avec la table "records"
    members : (qui liste tous les noms (name), et leur instruments, des musiciens)
    band_member : (qui est la table pivot de 'bands' et 'members' ) elle a les champs : 'band_id' et 'member_id'.

    Pour chaque titre affiché j'ai bien la liste des musiciens qui ont participés à l'enregistrement.
    A ce niveau cela se passe bien.

    Mais j'aimerai faire des recherches sur les : 'titre', 'année', 'ville' et "nom d'un musicien" qui aurait pu jouer sur le titre.
    Ou pour être plus clair : 'J'aimerai demandé la liste de tous les morceaux ou un musicien a joué'.

    Mais je n'arrive pas, j'ai regardé sur Internet et essayé des tas de choses mais je ne trouve pas.

    Auriez vous une idée, une piste ?
    Merci.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    j'aimerai faire des recherches sur les : 'titre', 'année', 'ville' et "nom d'un musicien" qui aurait pu jouer sur le titre.
    Ou pour être plus clair : 'J'aimerai demandé la liste de tous les morceaux ou un musicien a joué'.
    Laravel et Eloquent proposent sûrement des facilités que je ne connais pas.

    En SQL pur ça donnerait :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ALL records.id, records.name, records.year -- ...
    FROM records
    INNER JOIN bands ON records.band_id = bands.id
    INNER JOIN band_member ON bands.id = band_member.band_id
    INNER JOIN members ON band_member.member_id = members.id
    WHERE members.name = :name OR records.title = :title OR records.city = :city OR records.year = :year

  3. #3
    Membre habitué
    Homme Profil pro
    Je me pose des questions
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Je me pose des questions

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut
    Bonjour Séb.,

    Je te remercie de ta réponse.

    Je n'avais pas pensé à faire une requête SQL directement... Comme ils préconisent d'utiliser eloquente.

    Je vais essayer de l'utiliser, et revenir vite.

    Merci

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Tu nous diras ce que ça donne.

    De mémoire avec Eloquent il y a une méthode pivot() à utiliser, mais ça fait trop longtemps que je n'ai pas pratiqué pour t'en dire plus

  5. #5
    Membre habitué
    Homme Profil pro
    Je me pose des questions
    Inscrit en
    Septembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Je me pose des questions

    Informations forums :
    Inscription : Septembre 2016
    Messages : 9
    Par défaut
    Merci Séb.
    Cela fonctionne !!

    Donc voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
        $name = '%blabla%';
        $year = 1937;
        $titre = '%b%';
        $city = 'Paris';
     
     
        $records = DB::select('
        SELECT * FROM records
        INNER JOIN bands ON records.band_id = bands.id
        INNER JOIN band_member ON bands.id = band_member.band_id
        INNER JOIN members ON band_member.member_id = members.id
        WHERE members.name like ? AND records.year = ? AND records.title Like ? AND records.city = ?
        ', [$name, $year, $titre, $city]);
     
        dd($records);
    Cela affiche bien les résultats demandés. (testé dans tous les sens !)

    Il doit y avoir une "méthode Eloquent" je vais essayer de la trouver et je la posterai ici.

    Merci beaucoup.
    Bonne journée à vous tous

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Attention au "SELECT *" qui va te ramener des colonnes en doublon (bands.id et band_member.band_id, etc.), et sûrement d'autres inutiles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.6] Faire une requête sur deux tables pour avoir la valeur MAX sans le GROUP BY
    Par emykev22 dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/06/2014, 12h12
  2. Réponses: 22
    Dernier message: 10/07/2011, 17h49
  3. faire une requête sur une table d'un autre schéma
    Par kineton dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/04/2008, 15h08
  4. [BDE] Comment faire une requête sur 2 Ttables ?
    Par dim07 dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/12/2006, 12h15
  5. faire une requête sur plusieurs tables
    Par julien.63 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/08/2006, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo