Doctrine:在开始/结束日期过滤多个对象

时间:2018-01-28 15:12:45

标签: php symfony doctrine-orm

我有一个代表对象租用期的实体。在当前概述页面上,我显示此时可以雇用的所有对象。每个产品都有许多ObjectProductPeriods

class ObjectProductPeriod
{
/**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\Column(type="date")
 */
private $datumUit;

/**
 * @ORM\Column(type="date")
 */
private $datumTerug;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\ObjectProduct", inversedBy="orderPeriods")
 */
private $objectProduct;

/**
 * @ORM\OneToOne(targetEntity="App\Entity\KlantOrder", inversedBy="objectPeriod")
 */
    private $klantOrder;
}

我正在检索ObjectProductPeriodRepository中的可用对象:

public function getAvailibleObjects(){
        $currentDate = new \DateTime('now');
        $query = $this->createQueryBuilder('qb')
            ->where(':current NOT BETWEEN qb.datumUit AND qb.datumTerug')
            ->setParameter('current', $currentDate)
            ->getQuery();
        $result =$query->execute();
        $objects = array();
        foreach ($result as $key => $period){
            $objects[] = $period->getObjectProduct();

        }
        return $objects;
    }

唯一的问题是,当一个对象有多个句点时。如果当前日期不在开始日期和结束日期之间,则会将其添加到页面上显示的对象中。但是如果有一个时间段低于该对象的开始和结束时段,整个对象就会在其他可用对象之间进行(虽然不应该在那里列出)。概览应显示当前日期不在该特定对象的任何时间段的开始日期和结束日期之间的对象。因此,如果有2个期间,当前日期在第一个期间和第二个期间之间,当前日期不在期间之间,在这种情况下,不应显示任何对象。

如何使用查询构建器过滤此特定方案中的对象?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我相信你必须做这样的事情:

$qb = $this->createQueryBuilder('qb');
$qb->where('qb.datumUit > :current')
   ->andWhere('qb.datumTerug < :current')
   ->setParameter('current', currentDate)