Abe*_*bel 0 php string doctrine date symfony-2.3
我有一个人(员工)搜索应该按姓名,姓氏,出生日期和一些其他参数返回人员列表.搜索适用于每个参数免除日期参数,如出生日期.我的控制器代码是这样的:
$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());
//...
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
错误如下:
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
Run Code Online (Sandbox Code Playgroud)
我应该用自己的函数将日期转换成字符串吗?如果是的话我应该在哪里做以使其可重复使用?任何工作的例子?我以为Doctrine能够自动完成这项工作.让你在出现.
DateTime对象不实现__toString()方法,因此您必须将它们显式转换为字符串.
幸运的是,他们确实有一种format()方法可以用来为你做这件事,例如:
->setParameter('birthDay', '%' . $birthDay->format('Y-m-d') . '%')
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档.