原则2 一2许多相关实体筛选结果



基本上,我有两个实体,地点和事件:

/**
 * Place
 *
 * @ORMTable(name="place")
 * @ORMEntity(repositoryClass="AppBundleRepositoryPlaceRepository")
 */
class Place
{
   /**
     * @var int
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

   /**
     * @ORMOneToMany(targetEntity="AppBundleEntityEvent", mappedBy="place")
     */
    private $events;
}

class Event
{
    /**
     * @var int
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var DateTime
     * @JMSType("DateTime<'H:i'>")
     * @ORMColumn(name="event_starts", type="datetime")
     */
    private $eventStarts;
    /**
     * @var DateTime
     * @JMSType("DateTime<'Y/m/d H:i'>")
     * @ORMColumn(name="event_ends", type="datetime", nullable=true)
     */
    private $eventEnds;
    /**
     * @var string
     *
     * @ORMColumn(name="title", type="string", length=255)
     */
    private $title;
    /**
     * @var string
     *
     * @ORMColumn(name="event_id", type="string", length=70)
     */
    private $event_id;
    /**
     * @JMSExclude()
     * @ORMManyToOne(targetEntity="Place")
     * @ORMJoinColumn(name="place_id", referencedColumnName="id")
     */
    private $place;

当我查询地点时,我希望不是所有事件都会被加入,而只会加入今天发生的事件(事件开始=今天)。有没有办法只用 Doctrine 或 MySQL 来做到这一点?

非常简单。

    $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();

相关内容

  • 没有找到相关文章

最新更新