首页 > 解决方案 > 教义 | 关系的日期时间之间

问题描述

我正在做一个学校项目,我们为电影院建立一个网站。在管理中,您可以创建电影,然后您可以创建节目

我有 2 个实体:

节目

$id
$name
$movie
...
$date (when the movie starts)

电影

$id
$name
...
$shows

现在我的问题就像在真正的电影网站上一样,我希望时间表是从星期四到星期三。但我没有获得返回日期范围内所有电影的查询权:

电影资料库

$qb = $this->createQueryBuilder('movie')
        ->innerJoin('movie.shows', 'shows')
        ->where('shows.date > :thursday')
        ->andWhere('shows.date < :wednesday')
        ->setParameters([
            'thursday' => $thursday,
            'wednesday' => $wednesday
        ]);

    return $qb->getQuery()->getResult();

查询只返回范围内有 1 个或多个节目的电影(及其所有节目)。

见这里(星期四是 31.05。星期三是 06.06):

如果在日期范围内有这部电影的一个节目,则将显示这部电影的所有节目 在此处输入图像描述


解决了它:

我需要制作 ->select() 并选择展位桌。

$qb = $this->createQueryBuilder('movie')
        ->innerJoin('movie.shows', 'shows');
        ->select('movie', 'shows')
        ->where('shows.date > :thursday')
        ->andWhere('shows.date < :wednesday')
        ->setParameters([
            'thursday' => $thursday->format('Y-m-d H:i:s'),
            'wednesday' => $wednesday->format('Y-m-d H:i:s')
        ])
        ->orderBy('shows.date', 'ASC')
    ;

标签: phpsymfonydoctrine-ormdoctrine

解决方案


尝试反转查询,请像这样:

$qb = $this->createQueryBuilder('show')
        ->innerJoin('show.movie', 'movie')
        ->where('show.date > :thursday')
        ->andWhere('show.date < :wednesday')
        ->setParameters([
            'thursday' => $thursday,
            'wednesday' => $wednesday
        ]);

    return $qb->getQuery()->getResult();

推荐阅读