Php Symfony2可捕获致命错误:类DateTime的对象无法转换为字符串
我有一个个人(雇员)搜索,应该返回一个按姓名、姓氏、出生日期和一些其他参数列出的人的列表。对于日期参数(如出生日期)豁免的每个参数,搜索都可以正常工作。我的控制器代码如下:Php Symfony2可捕获致命错误:类DateTime的对象无法转换为字符串,php,string,date,doctrine,symfony-2.3,Php,String,Date,Doctrine,Symfony 2.3,我有一个个人(雇员)搜索,应该返回一个按姓名、姓氏、出生日期和一些其他参数列出的人的列表。对于日期参数(如出生日期)豁免的每个参数,搜索都可以正常工作。我的控制器代码如下: $aWorker = new Worker(); $searchWorkerForm = $this->createFormBuilder($aWorker) ->add('omang', 'text', array('required' => false))
$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
我应该用自己的函数将日期转换为字符串吗?如果是这样的话,我应该在哪里做以使其可重用?有没有可行的例子?
我认为教义能够自动做到这一点。
在advenced中告诉您。日期时间对象没有实现
\uu toString()
方法,因此必须将它们显式转换为字符串
幸运的是,他们确实有一个format()
方法,您可以使用它来为您执行此操作,例如:
->setParameter('birthDay', '%' . $birthDay->format('Y-m-d') . '%')
有关详细信息,请参阅。日期时间对象未实现
\uu toString()
方法,因此必须将它们显式转换为字符串
幸运的是,他们确实有一个format()
方法,您可以使用它来为您执行此操作,例如:
->setParameter('birthDay', '%' . $birthDay->format('Y-m-d') . '%')
有关更多信息,请参见。它很有效,谢谢大家@Glavić和@vascowhite,我唯一要做的就是确保bird的日期不是空的
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;
}
我真的不知道我的代码看起来有多专业,但它适合我。
再次感谢。这很有效谢谢大家@Glavić和@vascowhite,我唯一要做的就是确保bird的日期不是空的
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;
}
我真的不知道我的代码看起来有多专业,但它适合我。
再次感谢。可能的副本