Symfony - 过滤连接会导致查询不返回任何内容

时间:2014-06-06 09:41:39

标签: mysql symfony join doctrine-orm many-to-many

我正在尝试执行一个查询,该查询返回已批准但未被当前用户预订的事件。

当我执行此查询时,我没有返回任何事件,它应返回当前用户未预订的事件。

 public function getAvailableEvents(UserInterface $user)
    {
        $q = $this->getEntityManager()->createQuery('
                    select v from Tsk\FEBundle\Entity\Event v
                    left join v.attendance a where a.id != :user
                    and v.is_approved = true
                ');
        $q->setParameter("user", $user);
        return $q->execute();
    }

以下是此关系的两个实体UserEvent特定部分。

User

/**
 * @ORM\ManyToMany(targetEntity="Event", inversedBy="attendance", cascade={"persist", "remove"})
 * @ORM\JoinTable(name="users_events",
 *      joinColumns={@ORM\JoinColumn(name="event_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
 *      )
 */
 protected $booked_events;

Event实体:

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="booked_events")
 */
 protected $attendance;

1 个答案:

答案 0 :(得分:1)

如上所述,问题似乎出现在查询中。如果您想获得任何人都没有参加的活动,您可以使用WHERE a IS NULL条件。