2013-10-02 4 views
0

J'ai une personne (employé) de recherche qui est censée retourner une liste de personnes par nom, prénom, date de naissance et d'autres paramètres. la recherche fonctionne bien pour chaque paramètre exempt de paramètres de date, comme la date de naissance. mon code de contrôleur est le suivant:Symfony2 Catchable Fatal Erreur: Objet de la classe DateTime n'a pas pu être converti en chaîne

 $aWorker = new Worker(); 
    $searchWorkerForm = $this->createFormBuilder($aWorker) 
      ->add('omang', 'text', array('required' => false)) 
      ->add('workerName', 'text', array('required' => false)) 
      ->add('workerSurname', 'text', array('required' => false)) 
      ->add('birthDay', 'date', 
        array('required' => false, 'years' => range(1950, 2020))) 
      ->add('dateOfEmployment', 'date', array('required' => false)) 
      ->add('search', 'submit') 
      ->getForm(); 
    //Handle Request 
    if ($request->getMethod() == 'POST') 
     $searchWorkerForm->handleRequest($request); 

     $aWorkerList = $this->getDoctrine() 
      ->getRepository('OsdRetireBundle:Worker') 
      ->findByPersonDetails($aWorker->getOmang(), 
        $aWorker->getWorkerName(), 
        $aWorker->getWorkerSurname(), 
        $aWorker->getBirthDay(), 
        $aWorker->getDateOfEmployment()); 
//... 

La fonction findByPersonDetails est la suivante:

public function findByPersonDetails($omang, $WorkerName, 
     $workerSurname, $birthDay, $dateOfEmployment){ 
    $qqq = $this->getEntityManager() 
      ->createQuery('SELECT w FROM OsdRetireBundle:Worker w 
       WHERE w.omang LIKE :omang 
       AND w.workerName LIKE :WorkerName 
       AND w.workerSurname LIKE :workerSurname 
       AND w.birthDay LIKE :birthDay 
       AND w.dateOfEmployment LIKE :dateOfEmployment') 
      ->setParameter('omang', '%'.$omang.'%') 
      ->setParameter('WorkerName', '%'.$WorkerName.'%') 
      ->setParameter('workerSurname', '%'.$workerSurname.'%') 
      ->setParameter('birthDay', '%'.$birthDay.'%') 
      ->setParameter('dateOfEmployment', '%'.$dateOfEmployment.'%') 
      ->getResult(); 
    return $qqq; 
} 

L'erreur est la suivante:

Catchable Fatal Error: Object of class DateTime could not be converted to string in /var/www/Org/src/Osd/RetireBundle/Entity/WorkerRepository.php line 27 
500 Internal Server Error - ContextErrorException 

Suis-je censé convertir avec ma propre fonction de la date corder? si oui Où devrais-je le faire pour le rendre réutilisable? un exemple de travail? Je pensais que Doctrine était capable de faire cela automatiquement. Thak vous dans advenced.

+0

duplication possible de [Comment rendre un objet DateTime dans un modèle Twig] (http://stackoverflow.com/questions/8318914/how-to-render-a-datetime-object-in-a-twig-template) – javidazac

Répondre

5

Les objets DateTime n'implémentent pas une méthode __toString(), vous devrez donc les convertir explicitement en chaîne.

Heureusement pour vous, ils ont une méthode format() que vous pouvez utiliser pour le faire pour vous, par exemple:

->setParameter('birthDay', '%' . $birthDay->format('Y-m-d') . '%') 

Voir la docs pour plus d'informations.

0

Cela fonctionne merci les gars @ Glavić et @vascowhite, la seule chose que je dois faire est de s'assurer que la date de l'oiseau n'est pas vide. Je ne sais pas à quel point mon code est professionnel, mais ça marche pour moi. Merci encore.

Questions connexes