将条件查询应用于Doctrine的`getRepository()`

时间:2015-09-28 20:36:47

标签: symfony doctrine-orm

我试图找到Symfony和Doctrine的脚,虽然我猜它远非优雅,但我设法让下面的工作 IF 我使用findall()。我的主要问题是我试图只返回尚未发生的事件。以下是我尝试使用expr()->gr()

我的控制器:

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;

当我尝试加载页面时,我得到了:

  

无法识别的字段:EventDate

我认为这是一个区分大小写的问题?我在我的数据库(EventDate)和我的Events实体注释中指定了name="EventDate"。我已经尝试将private $eventdate更改为private $EventDate,但这会让我看起来更加严重,所以我很快就退缩了:

  

DateType.php第53行中的FatalErrorException:错误:在非对象上调用成员函数format()

1 个答案:

答案 0 :(得分:0)

我没有使用标准的经验,但使用Doctrine查询语言(DQL)很容易实现。

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

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

$date必须是\DateTime的实例。