2015-09-28 37 views
1

我想用Symfony和Doctrine找到我的腳,雖然我猜測它遠非優雅,但我設法得到了下面的工作IF我使用findall()。我的主要問題是我試圖只返回尚未發生的事件。下面是一個使用expr()->gr()我嘗試:將條件查詢應用於Doctrine的`getRepository()`

我的控制器:

namespace AppBundle\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use AppBundle\Form\Type\RegistrationType; 
use AppBundle\Form\Model\Registration; 
use AppBundle\Entity\Events; 
use Doctrine\ORM\EntityRepository; 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/events", name="events") 
    */ 
    public function eventsAction(Request $request) 
    { 
     $calendar = $this->getDoctrine() 
         ->getRepository('AppBundle:Events'); 
     $criteria = new \Doctrine\Common\Collections\Criteria(); 
     $criteria->where($criteria->expr()->gt('EventDate',date('Y-m-d H:i:s'))); 
     $list=$calendar->matching($criteria); 

     return $this->render('default/events.html.twig', array(
      'title' => 'Events', 
      'list' => $list, 
     )); 
    } 
} 

Events.php實體是:

namespace AppBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Events 
* 
* @ORM\Table(name="Events") 
* @ORM\Entity 
*/ 
class Events 
{ 
    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="EventDate", type="date", nullable=false) 
    */ 
    private $eventdate; 

當我嘗試加載網頁,我得到:

Unrecognized field: EventDate

我假設這是一個區分大小寫的問題?我在我的數據庫(EventDate)和我的Events實體註釋指定name="EventDate"。我試圖改變private $eventdateprivate $EventDate,但是這給了我一個更加嚴肅的錯誤,所以我趕緊退到:

FatalErrorException in DateType.php line 53: Error: Call to a member function format() on a non-object

+1

使用DateTime代替日期:'new \ DateTime('now')'而不是'date('Ymd H:i:s')' – Matteo

+0

謝謝@Matteo - 我一定會記得, - ) – Bendy

回答

0

我使用標準沒有經驗,但是這是非常容易使用學說查詢語言來完成( DQL)。

$em = $this->getDoctrine()->getManager(); 

$result = $em->createQuery(
      'SELECT e FROM AppBundle:Events e 
      WHERE e.eventdate > :date' 
     ) 
     ->setParameter(':date', $date) 
     ->getResult(); 

$date必須的\DateTime一個實例。

+0

謝謝@LorenzSchaef - 我遇到過可能的DQL解決方案,雖然我讀了下面的回答http://stackoverflow.com/a/14790069/3972769,建議不要使用DQL(並通過upvotes來判斷我認爲是最佳解決方案?) – Bendy