2016-04-25 62 views
0

基本上,我有兩個實體,地點和事件:Doctrine2 One2Many相關實體篩選結果

/** 
* Place 
* 
* @ORM\Table(name="place") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\PlaceRepository") 
*/ 

class Place 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 



    /** 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Event", mappedBy="place") 
    */ 
    private $events; 
} 

class Event 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var \DateTime 
    * @JMS\Type("DateTime<'H:i'>") 
    * @ORM\Column(name="event_starts", type="datetime") 
    */ 
    private $eventStarts; 

    /** 
    * @var \DateTime 
    * @JMS\Type("DateTime<'Y/m/d H:i'>") 
    * @ORM\Column(name="event_ends", type="datetime", nullable=true) 
    */ 
    private $eventEnds; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="title", type="string", length=255) 
    */ 
    private $title; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="event_id", type="string", length=70) 
    */ 
    private $event_id; 

    /** 
    * @JMS\Exclude() 
    * @ORM\ManyToOne(targetEntity="Place") 
    * @ORM\JoinColumn(name="place_id", referencedColumnName="id") 
    */ 
    private $place; 

當我查詢的地方,我想,並不是所有的活動會加入,但只有今天發生的事件(eventStarts =今天)。有沒有辦法只使用Doctrine或MySQL?

回答

1

非常簡單。

$qb = $this->getEntityManager()->createQueryBuilder(); 

如果你想只得到其在特定日期範圍內的事件地方:

$data = $qb->select('p, e') 
     ->from('YourBundle:Place', 'p') 
     ->join('p.events', 'e') 
     ->where($qb->expr()->between('e.eventStarts', ':start', ':end')) 
     ->setParameter('start', $someStartDateTimeObject) 
     ->setParameter('end', $someEndDateTimeObject) 
     ->getQuery() 
     ->getResult(); 

如果你想獲得的所有地方,即使他們沒有一個事件,但加入事件,如果有一個指定範圍:

$data = $qb->select('p, e') 
     ->from('YourBundle:Place', 'p') 
     ->leftJoin('p.events', 'e', 'WITH', $qb->expr()->between('e.eventStarts', ':start', ':end')) 
     ->setParameter('start', $someStartDateTimeObject) 
     ->setParameter('end', $someEndDateTimeObject) 
     ->getQuery() 
     ->getResult(); 
+0

我想我應該叫你魔術師,因爲我試過基本相同的事情,但只有我所取得的事情是過濾的地方,它在事件那一天。謝謝你,小夥伴! –