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

Symfony PHP Discussion :

INSERT INTO : Définir les champs


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut INSERT INTO : Définir les champs
    Bonjour,
    J'ai récupéré un projet Symfony, mais je n'arrive pas à insérer des données à l'intérieur car les champs visés par l'insertion ne correspondent pas à ceux dans ma table. Seulement, j'ai beau faire des grep -r, vider le cacher, je ne trouve pas à quel moment les noms de colonnes sont inscrits en symfony pour être insérés (les colonnes lien_fichier, cours_id, plage_horaire_justif_abscence_id, utilisateur_etudiant_id, formation_id, que je souhaiterai modifié conformément à ma table).
    Mon erreur:
    Nom : eoor.png
Affichages : 1053
Taille : 26,6 Ko
    Ma table et ses colonnes :
    Nom : table.png
Affichages : 1036
Taille : 7,0 Ko
    Mon Controller (PanelEtudiantController.php)
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php
     
    namespace App\Controller;
     
    use Doctrine\ORM\EntityManagerInterface;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Validator\Constraints\DateTime;
    use Symfony\Component\HttpFoundation\Session\Session;
     
    use App\Entity\Pointage;
    use App\Entity\PlageHoraire;
    use App\Entity\Utilisateur;
    use App\Entity\AbscencesJustif;
     
    use App\Form\JustifAbscence;
    use App\Form\PointageNullType;
    use App\Form\PointageDeSortieType;
     
    use DateTimeImmutable;
     
    class PanelEtudiantController extends AbstractController
    {
      public function panelEtudiant()
      {
        $user = $this->getUser();
        $utilisateurEtudiant = $this->getDoctrine()->getRepository(Utilisateur::class)->find($user);
        $idPointage = $this->getDoctrine()->getRepository(Pointage::class)->findPointageSortieByEtudiant($utilisateurEtudiant);
        if($idPointage != null){
          $pointageExistant = $this->getDoctrine()->getRepository(Pointage::class)->find($idPointage[0]);
          $cours = $pointageExistant->getCours();
          return $this->render('panelEtudiant.html.twig', array('message' => 'Vous avez pointé en entrée de cours :', 'cours' => $cours, 'prenom' => $user->getPrenomUtilisateur(), 'nom' => $user->getNomUtilisateur()));
        } else {
          return $this->render('panelEtudiant.html.twig', array('message' => 'Vous n\'avez pas de pointage pour le moment', 'cours' =>'', 'prenom' => $user->getPrenomUtilisateur(), 'nom' => $user->getNomUtilisateur()));
        }
      }
      public function justifierAbscence(Request $request, EntityManagerInterface $em): Response
      {
        //$session = $this->get('session');
        $user = $this->getUser();
        $abscence_justif = new AbscencesJustif();
        //$user = $this->getDoctrine()->getRepository(Utilisateur::class)->find($id);
        $idPointage = $this->getDoctrine()->getRepository(AbscencesJustif::class)->findPointageSortieByEtudiant($user);
        $idPointageNull = $this->getDoctrine()->getRepository(AbscencesJustif::class)->findPointageByEtudiant($user);
     
        $formation = $user->getFormation();
     
        $form = $this->createForm(JustifAbscence::class, $abscence_justif, ['formation' => $formation]);
     
        $form->handleRequest($request);
     
        if ($form->isSubmitted() && $form->isValid()) {
          $abscence_justif = $form->getData();
          $cours = $form['cours']->getData()->getNomUe();
          $plageHoraireJustifAbscence = $form['plageHoraire']->getData()->getPlageHoraire();
          $tab = explode("h", $plageHoraireJustifAbscence, 2);
          $pointageTemporaire = new \DateTime();
          $abscence_justif->setFormation($formation);
          $abscence_justif->setUtilisateurEtudiant($user);
     
          $em = $this->getDoctrine()->getManager();
          $em->persist($abscence_justif);
          $em->flush();
     
          return $this->redirectToRoute('panelEtudiant');
        }
        return $this->render('panelEtudiantJustifierAbscence.twig', [
            'nom' => $user->getNomUtilisateur(),
            'prenom' => $user->getPrenomUtilisateur(),
            'form'=>$form->createView(),
        ]);
     
      }
    }
    Entité (AbscencesJustif.php)
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    <?php
     
    namespace App\Entity;
     
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * @ORM\Entity(repositoryClass="App\Repository\PointageRepository")
     */
    class AbscencesJustif
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Cours", inversedBy="pointage")
         * @ORM\JoinColumn(nullable=false)
         */
        private $cours;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\PlageHoraire", inversedBy="pointage")
         * @ORM\JoinColumn(nullable=false)
         */
        private $plageHoraireJustifAbscence;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur", inversedBy="pointage")
         */
        private $utilisateurEtudiant;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Formation", inversedBy="pointages")
         * @ORM\JoinColumn(nullable=false)
         */
        private $formation;
     
     
        /**
         * @ORM\Column(type="boolean")
         */
        private $lienFichier;
     
        public function __construct()
        {
     
        }
     
        public function getId(): ?int
        {
            return $this->id;
        }
     
        public function getDateJustif(): ?\DateTimeInterface
        {
            return $this->dateJustif;
        }
     
        public function setDateJustif(\DateTimeInterface $dateJustif): self
        {
            $this->dateJustif = $dateJustif;
     
            return $this;
        }
     
        public function getCours(): ?Cours
        {
            return $this->cours;
        }
     
        public function setCours(?Cours $cours): self
        {
            $this->cours = $cours;
     
            return $this;
        }
     
        public function getUtilisateurEtudiant(): ?Utilisateur
        {
            return $this->utilisateurEtudiant;
        }
     
        public function setUtilisateurEtudiant(?Utilisateur $utilisateurEtudiant): self
        {
            $this->utilisateurEtudiant = $utilisateurEtudiant;
     
            return $this;
        }
        public function getPlageHoraire(): ?PlageHoraire
        {
            return $this->plageHoraireJustifAbscence;
        }
     
        public function setPlageHoraire(?PlageHoraire $plageHoraireJustifAbscence): self
        {
            $this->plageHoraireJustifAbscence = $plageHoraireJustifAbscence;
     
            return $this;
        }
     
        public function getLienFichier(): ?bool
        {
            return $this->lienFichier;
        }
     
        public function setLienFichier(bool $lienFichier): self
        {
            $this->lienFichier = $lienFichier;
     
            return $this;
        }
        public function getFormation(): ?Formation
        {
            return $this->formation;
        }
     
        public function setFormation(?Formation $formation): self
        {
            $this->formation = $formation;
     
            return $this;
        }
     
     
    }
    Vue (panelEtudiantJustifierAbscence.php)
    Code twig : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    {% extends 'base.html.twig' %}
     
    {% block title %}CHRONOS ADMIN - Dashboard{% endblock %}
    {% block stylesheetsAdmin %}
    <link rel="stylesheet" href={{ asset('css/sb-admin-2.min.css') }}>
    {% endblock %}
     
    {% block body %}
    <!-- Page Content -->
      <div class="container">
     
        <!-- Jumbotron Header -->
        <header class="jumbotron my-4">
    	<a href="{{ path('logout') }}" class="btn btn-sm btn-danger float-right">Quitter</a>
          <h1 class="display-3">Justifier une abscence</h1><br /><br />
          <!-- <p class="lead">Sélectionnez le cours pour visualiser les pointages effectués aujourd'hui pour ce cours.</p> -->
     
    			<div class="row justify-content-md-center">
    				<div class="col-xl-6 col-md-3 mb-4">
    					<div class="card border-left-primary shadow h-100 py-2">
    						<div class="card-body">
    							<div class="row no-gutters align-items-center">
    								<div class="login d-flex align-items-center py-5">
    									<div class="container">
    										<div class="row">
    											<div class="col-md-12 col-lg-12 mx-auto custom-fade">
    											<section class="pricing">
    												<div class="container">
    												{{ form_start(form) }}
    												<div class="form-label-group" style="margin-bottom:10px">
    													{{ form_widget(form.cours) }}
    												</div>
    												<div class="form-label-group" style="margin-bottom:10px">
    													{{ form_widget(form.plageHoraire) }}
    												</div>
    												<div class="form-label-group" style="margin-bottom:10px">
    													<input type="file" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
    												</div>
    												<div class="form-label-group">
    													{{ form_widget(form.connection) }} <a href="{{ path('panelEtudiant') }}" class="btn btn-light text-uppercase ml-2 px-2">Annuler</a>
    												</div>
    												{{ form_end(form) }}
    												</div>
    											</section>
    											</div>
    										</div>
    									</div>
    								</div>
    							</div>
    						</div>
    					</div>
    				</div>
    			</div>
        </header>
      </div>
    {% endblock %}

    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Bonjour,

    Etant donné que tu passes ton objet à ton formulaire $form = $this->createForm(JustifAbscence::class, $abscence_justif, ['formation' => $formation]), tu n'as pas besoins de récupérer explicitement les données de ton formulaire $abscence_justif = $form->getData() : ton objet aura été mis à jour automatiquement avec les données encodées. Donc, tu peux également supprimer touts tes $abscence_justif->setxxxx($xxxx); tout en gardant l'enregistrement de ton objet en base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          $em = $this->getDoctrine()->getManager();
          $em->persist($abscence_justif);
          $em->flush();
    Egalement, à la vue de tes questions, je pense qu'il te serait vraiment utile de lire correctement la documentation de base de Symfony.

  3. #3
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut
    Merci pour ta réponse.

    Je ne suis pas certain de pouvoir me passer de mes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          $abscence_justif->setFormation($formation);
          $abscence_justif->setUtilisateurEtudiant($user);
    car sinon mes 2 dernières variables que j'insers deviennent nulles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [null, 91, 65, null, null]:
    Alors que, comme tu le vois sur mon screen initial, elles passent bien.

    Ma seule question: A quel moment viennent ces paramètres passés?
    " lien_fichier, cours_id, plage_horaire_justif_abscence_id, utilisateur_etudiant_id, formation_id"
    je pense savoir : j'ai tout créé à la main. Mes fichiers, mes entités, ma vue, etc. En symfony, il y a une commande pour charger mes modifs par rapport à la base de données non? J'ai tenté la commande suivante et j'ai l'erreur :
    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
    18
    19
     
    C:\Program Files\Symfony\projet-thematique>php bin/console doctrine:schema:validate
     
    Mapping
    -------
     
     
     [OK] The mapping files are correct.
     
     
    Database
    --------
     
     
     [ERROR] The database schema is not in sync with the current mapping file.
     
     
     
    C:\Program Files\Symfony\projet-thematique>
    Une idée sur ce qui cloche? Merci d'avance

  4. #4
    Membre éprouvé
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Par défaut
    Bonjour,
    Comment la table a elle était créé ? Vous l'avez fait à la main (ainsi que l'entité qui correspond) ?
    Il est préférable d'utiliser le maker symfony pour ce genre de cas simples.

    Une fois que votre entité est correcte, generez un fichier de migration (php bin/console make:migration) et utilisez ce fichier pour mettre à jour votre DB (php bin/console doctrine:migrations:migrate)

  5. #5
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut
    Bonjour,
    Tout à fait j'ai créé la table ainsi que l'entité à la main.
    Pour la première commande, j'ai ce résultat :
    C:\Program Files\Symfony\projet-thematique>php bin/console make:migration

    Success!

    Next: Review the new migration "src/Migrations/Version20200304094147.php"
    Then: Run the migration with php bin/console doctrine:migrations:migrate
    See https://symfony.com/doc/current/bund...dle/index.html
    La seconde en revanche, me signale des erreurs. Avant de les afficher j'aimerai vous poser une question qui me permettra probablement de les résoudre.
    La seconde commande a créé plusieurs tables dans ma base de données (par exemple "admin_pointage, composé de 2 colonnes).
    Je souhaiterai savoir dans quel fichier il est indiqué que ces 2 colonnes doivent être créé.

    Ce qui m'énerve avec symfony c'est que j'ai beau faire des grep -r sur l'arborescence pour trouver les variables que je cherche, il ne m'indique jamais ce que je veux.
    Là par exemple pour "admin_pointage" un grep -r me dit qu'il se trouve ici :
    src/Migrations/Version20190301150855.php
    var/log/dev.log

    Donc soit dans le fichier que l'on a généré plus tôt, soit dans les log. Et donc je suis bloqué. Je suis censé modifier un fichier contenant une variable sans savoir où il et elle se situe.
    J'espère avoir été assez clair sur mes explications, et que vous avez une idée de la réponse. Ca me débloquerait beaucoup

    Merci pour vos réponses et votre temps.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Par défaut
    La commande make:migration va aller voir dans tous vos fichiers d'entité et créer un fichier de migration contenant des requetes SQL (que vous pouvez éditer si besoin mais pas forcément recommandé)
    Par rapport à la table dont vous parlez, je pense que c'est le résultat d'une relation ManyToMany dans l'une de vos entité (difficile d'être plus précis sans code)

    Peut être qu'il serait intéressant de reprendre la structure depuis le début en utilisant les outils que symfony met à votre disposition (make:entity, make:migration etc...)

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Je souhaiterai savoir dans quel fichier il est indiqué que ces 2 colonnes doivent être créé.
    Ce n'est pas forcement explicite dans un fichier. Symfony est capable de récupérer le nom d'une variable (exemple : maVariable) en camel case, la transformer en snake case (ex : ma_variable) et générer la colonne qui va bien en base de donnée directement via ce petit tour de passe passe.

    Si tu ne trouve pas ton entité ou ta variable admin_pointage, essaye de rechercher adminPointage

    Si ce comportement te dérange, tu peux expliciter les nom de colonnes/tables via les annotations et cela forcera symfony à utiliser les noms que tu désire.

    Edit : Pour les ManyToMany, OneToMany etc, ce n'est pas toujours aussi simple. je ne me souviens plus exactement quel est le changement opéré par symfony mais il est possible qu'il ajoute un "_id" a la fin ou qu'il associe les nom des entités liées.

Discussions similaires

  1. Insert into table1 les champs de la table 2
    Par slyckers dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/11/2009, 13h28
  2. Spécifications import: définir les champs
    Par soff248 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/09/2008, 19h32
  3. Insert into dans un champ de type "timestamp"
    Par sylvette dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/10/2007, 17h35
  4. probléme avec insert into et les jontures
    Par belakhdarbts10 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2007, 11h35
  5. INSERT INTO dans un champ mémo
    Par Cri Cross dans le forum VBA Access
    Réponses: 12
    Dernier message: 05/03/2007, 16h24

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