我正在尝试使用Doctrine QueryBuilder进行此SQL查询:
SELECT * FROM events WHERE NOT id in (SELECT event_id FROM ues WHERE user_id = $userID)
UserEventStatus具有来自User和event的外键,以及状态的整数。我现在想查询所有来自特定用户的事件,这些事件在UserEventStatus中没有条目。我在EventRepository中的功能如下:
public function getUnReactedEvents(int $userID){
$expr = $this->getEntityManager()->getExpressionBuilder();
$originalQuery = $this->createQueryBuilder('e');
$subquery= $this->createQueryBuilder('b');
$originalQuery->where(
$expr->not(
$expr->in(
'e.id',
$subquery
->select('ues.user')
->from('App/Entity/UserEventStatus', "ues")
->where(
$expr->eq('ues.user', $userID)
)
)
)
);
$originalQuery->getDQL();
return $subquery->getQuery()->getResult();
}
但是我收到一条错误消息:Error: Method Doctrine\Common\Collections\ArrayCollection::__toString() must not throw an exception, caught ErrorException: Catchable Fatal Error: Object of class Doctrine\ORM\EntityManager could not be converted to string (500 Internal Server Error)
任何人都可以帮助我或在文档中指出正确的地方吗?原因是我找不到描述我的问题的东西。另一件事是,我不知道它是否可能,但这会很好。我可以以某种方式直接提出对象请求吗?我的意思不是使用字符串App/Entity/UserEventStatus
,而是使用类似UserEventStatus :: class之类的东西。感谢您的帮助。 :)
编辑:忘了我在结尾处有一个$originalQuery->getDQL();
。如果我将其切出,则会收到此[Semantical Error] line 0, col 41 near 'App/Entity/UserEventStatus': Error: Class 'App' is not defined. (500 Internal Server Error)
public function search($term)
{
return $this->createQueryBuilder('cat')
->andWhere('cat.name = :searchTerm')
->setParameter('searchTerm', $term)
->getQuery()
->execute();
}
简单为:->where('cat.name = :searchTerm')