2013-10-02 61 views
0

我有一個人(員工)搜索應該返回人名單,姓氏,出生日期和其他一些參數。對於日期參數(如出生日期),每個參數的搜索都可以正常工作。我的控制器代碼是這樣的:Symfony2可捕獲的致命錯誤:DateTime類的對象無法轉換爲字符串

 $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()); 
//... 

的findByPersonDetails功能是這樣的:

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; 
} 

的錯誤是:

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 

我應該用我自己的函數將日期轉換字符串?如果是的話我應該在哪裏做到這一點,使其可重複使用?任何工作示例? 我認爲教義能夠自動做到這一點。 Thak you in advenced。

+0

[如何在Twig模板中渲染DateTime對象]的可能重複(http://stackoverflow.com/questions/8318914/how-to-render-a-datetime-object-in-a-twig-template ) – javidazac

回答

5

DateTime對象沒有實現__toString()方法,因此您必須將它明確地轉換爲字符串。

幸運的是,他們有一個format()方法,您可以利用來爲你做這一點,例如:

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

更多信息,請參見docs

0

它的作品謝謝你們@Glavić和@vascowhite,我唯一需要做的就是確保鳥的日期不是空的。

public function findByPersonDetails($omang, $WorkerName, 
     $workerSurname, $birthDay, $dateOfEmployment){ 
    $createQuery = 'SELECT w FROM OsdRetireBundle:Worker w 
       WHERE w.omang LIKE :omang 
       AND w.workerName LIKE :WorkerName 
       AND w.workerSurname LIKE :workerSurname'; 
    if ($birthDay != '') 
     $createQuery .= ' AND w.birthDay LIKE :birthDay'; 

    if ($dateOfEmployment != '') 
     $createQuery .= 'AND w.dateOfEmployment LIKE :dateOfEmployment'; 

    $qqq = $this->getEntityManager() 
      ->createQuery($createQuery) 
      ->setParameter('omang', '%'.$omang.'%') 
      ->setParameter('WorkerName', '%'.$WorkerName.'%') 
      ->setParameter('workerSurname', '%'.$workerSurname.'%'); 
    if ($birthDay != '') $qqq = $qqq->setParameter('birthDay', '%'.$birthDay->format('Y-m-d').'%'); 
    if ($dateOfEmployment != '') $qqq = $qqq->setParameter('dateOfEmployment' 
      , '%'.$dateOfEmployment->format('Y-m-d').'%'); 
    $qqq = $qqq->getResult(); 
    return $qqq; 
} 

我真的不知道我的代碼看起來有多專業,但它適用於我。 再次感謝您。

相關問題