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

  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 325
    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 325
    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 325
    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 325
    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 325
    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 325
    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.

  7. #7
    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
    Oui bien sur, j'ai juste laiss� "*" car il y aurait eu trop de champs inutile pour l'exemple.
    Mais il fallait le souligner merci

    Je vais mettre ce "topic" comme r�solu

    merci S�b.

  8. #8
    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 � tous,

    Voici la r�ponse � ma question, en utilisant "Eloquent" :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
      $records = Record::whereHas('band.members', function ($query) use ($member) {
          $query->where('members.name', 'like', $member);
        })
          ->where('year', 'LIKE', $year)
          ->where('title', 'LIKE', $title)
          ->where('city', 'LIKE', $city)
          ->with('band.records', 'band.members')
          ->get();

    Le "whereHas" la doc dit en gros : '... vous pouvez utiliser les m�thodes whereHas et orWhereHas pour d�finir des contraintes de requ�te suppl�mentaires sur vos requ�tes..."

    Le "use ($member) ", c'est pour que la variable ($member) soit disponible � l'int�rieur de la fonction.

    Ici le : "... whereHas('band.members', function ...", il n'y a pas de "s" � la fin car c'est comme cela que je l'ai d�fini dans mon mod�le : "Record" (Faut faire attention � cela, c'est source d'erreur !)

    Le : "... ->with('band.records', 'band.members') ..." le "with", si j'ai bien compris, pour dire � la requ�te Eloquent de ne pas oublier de r�cup�rer ses infos aussi... (des relations).


    J'esp�re avoir pu aider d'autres personnes, si jamais.

    Merci @S�b. pour ton aide.

    Prenez soin de vous

+ 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