Symfony2 Catchable Fatal Error: объект класса 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 

Должен ли я преобразовать дату в строку с помощью моей собственной функции? если да, то где я должен сделать это, чтобы сделать его многоразовым? любой рабочий пример? Я думал, что Doctrine может делать это автоматически. Спасибо за внимание.


person Abel    schedule 02.10.2013    source источник
comment
возможный дубликат Как отобразить объект DateTime в Twig шаблон   -  person pyjavo    schedule 06.07.2015


Ответы (2)


Объекты DateTime не реализуют метод __toString(), поэтому вам придется явно преобразовать их в строку.

К счастью для вас, у них есть метод format(), который вы можете использовать, чтобы сделать это за вас, например:

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

Дополнительную информацию см. в документах.

person vascowhite    schedule 02.10.2013

Это работает, спасибо, ребята, @Glavic и @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;
}

Я не знаю, насколько профессионально выглядит мой код, но у меня он работает. Еще раз спасибо.

person Abel    schedule 03.10.2013