0

名前、姓、生年月日、その他のパラメーターで人のリストを返すことになっている個人 (従業員) 検索があります。検索は、生年月日などの日付パラメーターを除外したすべてのパラメーターに対して正常に機能します。私のコントローラーコードはこれです:

        $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 はこれを自動的に行うことができると思いました。よろしくお願いします。

4

2 に答える 2

5

DateTime オブジェクトはメソッドを実装していないため、__toString()明示的に文字列に変換する必要があります。

幸いなことに、format()これを行うために利用できる方法があります。たとえば、次のようになります。

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

詳細については、ドキュメントを参照してください。

于 2013-10-02T10:15:41.697 に答える