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 :

Ajout d'une entité avec plusieurs dates


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 44
    Par défaut Ajout d'une entité avec plusieurs dates
    Bonjour,

    J'ai une entité de cette forme :

    J'ai une action qui permet d'ajouter des tâches, sauf que mon but et de pouvoir spécfier le range de date puis le persister dans la base de données jour par jour.
    Exemple d'ajout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Tâche1
     
    Start Date : 2016-12-22
    End Date : 2016-12-25
    Dans cet exemple la tâche comment le 22/12/2016 et se termine le 25/12/2016, je veux persister cette tâche dans ma base mysql sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Tâche1 : 2016-12-22
    Tâche1 : 2016-12-23
    Tâche1 : 2016-12-24
    Tâche1 : 2016-12-25
    Comment est ce que je peux spécifier cela dans mon controlleur svp?

    PS: je peux très bien faire l'ajout jour par jour, mais cela va prendre énormement de temps, c'est pour ça que je cherche à spécifier un range à l'ajout

    Merci pour votre aide,

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Bonjour ,
    indication :
    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
     
     public function getDatesBetween($start, $end)
    {
    if($start > $end)
    {
    return false;
    } 
     
    $sdate = strtotime("$start +1 day");
    $edate = strtotime($end);
     
    $dates = array();
     
    for($i = $sdate; $i < $edate; $i += strtotime('+1 day', 0))
    {
    $dates[] = date('Y-m-d', $i);
    }
     
    return $dates;
    }
     
    $arrayOfRangeDate = $this->getDatesBetween($startDate, $endDate) ;  // $startDate  Tâche1 : 2016-12-22  $endDate Tâche1 : 2016-12-25
     
      foreach ($arrayOfRangeDate as $key => $tache) {
        $em->persist($tache);
    }
     
     
     $em->flush();
    j'ai pas trop de temps pour le tester mais normalement ça devrais fonctionner

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 44
    Par défaut
    Hello,

    Merci pour ta réponse, j'ai essayé mais j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Catchable Fatal Error: Object of class DateTime could not be converted to string
    Pour cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sdate = strtotime("$start +1 day");
            $edate = strtotime($end);
    Je sais que c'est une histoire de conversion mais j'arrive pas trop à comprendre comment convertir le DateTime à String.

    J'ai essayé de changer la variable en mettant en dur les dates ci-dessous pour le tester jusqu'au bout:

    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
    public function getDatesBetween($start, $end) {
            if ($start > $end) {
                return false;
            }
            $sdate = strtotime("2016-12-21");
     
            $edate = strtotime("2017-01-01");
     
            $dates = array();
     
            for ($i = $sdate; $i < $edate; $i += strtotime('+1 day', 0)) {
                $dates[] = date('Y-m-d', $i);
            }
     
            return $dates;
        }
    Ensuite j'ai l'action pour ajouter (j'ai dû faire quelques modifs sur la boucle foreach) :

    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
    /**
         * Creates a new task entity.
         *
         */
        public function newAction(Request $request) {
            $task = new Task();
            $form = $this->createForm('TasksBundle\Form\TaskType', $task);
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
    
                $startDate = $form->get('startDate')->getData();
                $endDate = $form->get('endDate')->getData();
                $name = $form->get('name')->getData();
    
                $arrayOfRangeDate = $this->getDatesBetween($startDate, $endDate);
    
                $em = $this->getDoctrine()->getManager();
                foreach ($arrayOfRangeDate as $key) {
                    $task = new task();
                    $date = new \DateTime($key);
                    $task->setDate($date);
                    $task->setName($name);
                    $em->persist($task);
                }
                $em->flush();
                
    
                return $this->redirectToRoute('task_show', array('id' => $task->getId()));
            }
    
            return $this->render('task/new.html.twig', array(
                        'task' => $task,
                        'form' => $form->createView(),
            ));
        }
    Cela fonctionne bien mais je ne comprend pas la partie rouge, pourquoi est-ce que je dois lui renseigner a nouveau les attributs?

    Merci pour votre aide

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/04/2012, 18h35
  2. Réponses: 0
    Dernier message: 29/04/2011, 18h31
  3. Réponses: 2
    Dernier message: 18/11/2010, 13h00
  4. Réponses: 4
    Dernier message: 26/08/2009, 15h36
  5. Réponses: 1
    Dernier message: 23/08/2009, 14h55

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