Partage
  • Partager sur Facebook
  • Partager sur Twitter

Données issues d'un tableau

Insertion dans une table

Sujet résolu
    17 novembre 2019 à 17:14:41

    Bionjour

    J'utilise le framework Laravel

    Je souhaiterais insérer les éléments d'un tableau des données qui proviennent d'un input.

    <input type="checkbox" name="choix[]" value="{{$collection->email}}-{{$collection->ncsa}}" >

    Le code suivant dans le controller permet de les récupérer :

    $request = $request->choix;

    Me donne un résultat sous forme de tableau :

    Array:3[
    
    0 => "email1-identifiant1"
    
    1 => "email2-identifiant2"
    
    2 => "email3-identifiant3"
    
    ]

    J'ai d'abord voulu séparer la donnée 'email' de celle 'identifiant' en utilisant la méthode explode.

    $data = explode("-", $request[0]);

    Là je n'ai que email1 et identifiant1 (index 0)qui sont sélectionnés et séparés sous la forme d'un array

    Array:2[
    
    0=> "email1",
    
    1=> "identifiant1",
    
    ]

    Je n'ai pas toutes les lignes.

    J'ai essayé en utilisant les boucles for et /ou foreach . Sans aucun résultat.

    Je ne vous cache pas que j'ai cherché sur internet et dans la doc Laravel

    Comment faut-il faire ? En sachant que mon but est d'insérer les données 'email' et 'identifiant' dans une table.

    Merci pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2019 à 17:49:02

      --

      -
      Edité par Koyuki Tanaka 17 novembre 2019 à 17:59:38

      • Partager sur Facebook
      • Partager sur Twitter
        17 novembre 2019 à 17:57:13

        Pourquoi ne pas utiliser l'email ou l'identifiant (plutôt) en clé ?

        Parce qu'en plus s'il y a un - dans l'email, avec ton explode, ça va donner n'importe quoi ...

        $data = array_map(function ($v) { return explode('-', $v); }, $request-&gt;choix);
        var_dump($data);
        foreach ($data as $subarray) {
            echo $subarray[0], ' : ', $subarray[1], PHP_EOL;
        }
        

        -
        Edité par julp 17 novembre 2019 à 17:59:10

        • Partager sur Facebook
        • Partager sur Twitter
          17 novembre 2019 à 18:11:13

          Merci à tous deux pour vos réponses

          J'ai remarqué qu'il suffisait parfois de poser une question sur le forum pour que je trouve moi-même la réponse ! 

          Ce que j'ai fait, c'est au lieu d'avoir dans mon tableau des données sous forme : '=>email1-identifiant1'

          Ce qui m'est proposé par julp

          Je n'ai sélectionné que l'identifiant

          Ensuite voilà le code de mon controller :

          $request = $request->choix;
                            $i = 0;
                            for($i;$i < count($request);$i++)
                            {
                              $users = User::select('identifiant', 'email')
                              ->where('identifiant', $request[$i])
                              ->get();
                              foreach($users as $value)
                              {
                                $this->model::create(
                                  [
                                  'email' =>$value->email,
                                  'identifiant'  =>$value->identifiant,
                                  ]);
                              }
                            }

          Et cela fonctionne !!! Mais il y a certainement mieux à faire.

          Merci encore  

          • Partager sur Facebook
          • Partager sur Twitter
            17 novembre 2019 à 18:23:06

            Une requête par tour de boucle quand tu pourrais n'en faire qu'une en générant un WHERE identifiant IN( ... ) ?

            Je ne connais pas ton API (Doctrine ?) mais si elle est bien faite, elle doit le faire d'elle même si tu passes un tableau là où tu passes actuellement $request[$i] (et virer la boucle)

            $users = User::select('identifiant', 'email')-&gt;where('identifiant', $request)-&gt;get();
            

            ? (en virant le premier for)

            -
            Edité par julp 17 novembre 2019 à 18:26:27

            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2020 à 9:16:17

              Merci julp.

              Je n'avais pas pris connaissance de ta réponse. Effectivement je vais simplifier mon code en tenant compte de ta remarque

              • Partager sur Facebook
              • Partager sur Twitter

              Données issues d'un tableau

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown