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 :

Mise à jour de plusieurs commandes sur la base de deux ID | Query Builder [5.4]


Sujet :

Laravel PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2016
    Messages : 30
    Par défaut Mise à jour de plusieurs commandes sur la base de deux ID | Query Builder
    Bonjour,

    Je souhaite mettre à jour le champ "laboratory" de ma table "orders detail" avec le nom du laboratoire qui traite le produit commande.

    J'arrive à créer mon array, récupérer les valeurs, mais je n'arrive pas à mettre à jour le champ avec le nom du laboratoire en question.

    J'aurais donc besoin de votre expertise, merci d'avance, Marc

    Ci-après toutes les infos nécessaires :

    Champs de ma table 'orders_detail'
    id | orderID | producttypeID | productnameID | laboratory
    225 | 206 | 4 | 26 |
    226 | 206 | 1 | 1 |

    Le champ à mettre à jour est le champ 'laboratory'
    1. Une commande peut contenir plusieurs produits, comme on peut le voir en observant le champ 'orderID'. La commande '206' comporte 2 produits.
    2. Chaque produit est élaboré dans un laboratoire spécifique (par ex. Cuisine, Boulangerie, Traiteur etc.).
    3. 3


    Dans mon cas, je devrais renseigner ce champ avec le laboratoire respectif, ce qui donnerait :

    id | orderID | producttypeID | productnameID | laboratory
    225 | 206 | 4 | 26 | Cuisine
    226 | 206 | 1 | 1 | Boulangerie

    Je génère donc une array avec la requête suivante pour récupérer le type de produit 'producttypeID' et le laboratoire 'laboratory' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* QUERY */
    /* GET THE LABORATORY(-IES) */
     
    $laboratory = DB::table('orders_detail')
    		->join('laboratories','orders_detail.producttypeID', '=', 'laboratories.id')
    		->select('orders_detail.producttypeID','laboratories.laboratory')
    		->where('orderID', '=', $id)
    		->get('laboratory');
    /* dd($laboratory); */
    Array retournée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Collection {#3639 ▼
      #items: array:2 [▼
        0 => {#3636 ▼
          +"producttypeID": 4
          +"laboratory": "Cuisine"
        }
        1 => {#3637 ▼
          +"producttypeID": 1
          +"laboratory": "Boulanger"
        }
      ]
    }
    Je souhaite mettre à jour ma table avec la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DB::table('orders_detail')
       ->where('orders_detail.orderID', '=', $id)
       ->where('orders_detail.producttypeID',$laboratory['producttypeID'])
       ->update(['laboratory'=> $laboratory]);
    le no de commande ('orderid') doit être égal a l'ID de la commande créée et insérée dans la table "orders".

    Le no du type de produit ('producttypeid') doit être égal à la valeur "producttypeid" retournée par mon array.Si c'est le cas alors le champ "laboratory" doit être mis à jour de la manière suivante ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    id    | orderID | producttypeID | productnameID | laboratory
    225 | 206       | 4                   | 26                    | Cuisine 
    226 | 206       | 1                   | 1                      | Boulangerie 
    si je teste la derniere requete ci-dessus, elle me retourne bien l'ID, mais aucune valeur 'producttypeID'.

    Mon souci doit donc être dans la manière dont je récupère ma valeur de l'array ;

    ->where('orders_detail.producttypeID',$laboratory['producttypeID'])

    Mais aussi dans la manière de mettre à jour le champ en question avec ;

    ->update(['laboratory'=> $laboratory]);

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    En OO et avec les attributs pour chaques champs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     ->where('orders_detail.producttypeID',$laboratory->producttypeID)
       ->update(['laboratory'=> $laboratory->laboratory]);

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2016
    Messages : 30
    Par défaut
    @MaitrePylos

    Merci pour votre retour. Malheureusement, il ne reconnait producttypeID :

    Property [producttypeID] does not exist on this collection instance.

    Je viens de revérifier et on le retrouve dans l'array, je pense donc qu'il y a encore un souci dans la requête...

    Collection {#3638 ▼
    #items: array:2 [▼
    0 => {#3635 ▼
    +"producttypeID": 4
    +"laboratory": "Cuisine"
    }
    1 => {#3636 ▼
    +"producttypeID": 1
    +"laboratory": "Pâtissier"
    }
    ]
    }

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    ok $laboratory est une collection donc faut boucler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($loboratory as $labo){
    DB::table('orders_detail')
       ->where('orders_detail.orderID', '=', $id)
       ->where('orders_detail.producttypeID',$labo->producttypeID)
       ->update(['laboratory'=> $labo->laboratory]);
    }

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Vietnam

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2016
    Messages : 30
    Par défaut
    @MaitrePylos

    Merci beaucoup ! Évidemment, il fallait boucler. Suis soulagé, car je coinçai sur ce point. Tout de bon et encore merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/06/2007, 17h59
  2. Mise à jour entre plusieurs bases
    Par jc2 dans le forum Oracle
    Réponses: 2
    Dernier message: 23/01/2007, 00h22
  3. Mise à jour de plusieurs étiquettes en même temps
    Par nicolovitch dans le forum Access
    Réponses: 1
    Dernier message: 19/07/2006, 16h45
  4. Réponses: 6
    Dernier message: 29/06/2006, 15h00
  5. Mise à jour de plusieurs tables
    Par NAMORJOSE dans le forum Access
    Réponses: 1
    Dernier message: 19/11/2005, 09h33

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