[英]Symfony - using orWhere() in doctrine query builder
我想返回我在消息中搜索的單詞的查詢結果,但只是 userOne 或 userTwo 當前登錄用戶的位置。
我認為我無法正確定義我的查詢構建器,因為在測試時正確返回登錄用戶。
我正在嘗試使用orWhere()子句,但它總是返回該詞的所有結果,而不僅僅是登錄用戶。
我的代碼:
public function search($word, $user)
{
return $this->getMessageRepository()
->createQueryBuilder('a')
->where('a.message LIKE :message')
->andWhere("a.toUser = $user OR fromUser = $user")
->setParameter('message', '%' . $word. '%')
->setParameter('toUser', $user)
->setParameter('fromUser', $user)
->getQuery()
->getResult();
}
where
語句的邏輯應該按預期工作。 但似乎您使用了不正確的parameter binding
。
toUser
和fromUser
是列,因此不需要綁定它們。
$user
是我們要過濾的target user
,因此它應該綁定到查詢。
一個例子:
{
return $this->getMessageRepository()
->createQueryBuilder('a')
->where('a.message LIKE :message')
->andWhere("a.toUser = :user OR a.fromUser = :user")
->setParameter('message', '%' . $word. '%')
->setParameter('user', $user)
->getQuery()
->getResult();
}
您需要使用前綴a
指定所有字段,因為您在createQueryBuilder('a')
創建了此前綴;
如果您有更多 1 個參數,請使用setParameters
。
您可以 OR 寫入 QueryBuilder type -> $builder->expr()->orX
builder- $builder->expr()->orX
。
您的查詢示例:
public function search($word, $user)
{
$builder = $this->createQueryBuilder('a');
return $builder
->where('a.message LIKE :message')
->andWhere($builder->expr()->orX(
$builder->expr()->eq('a.toUser', ':user'),
$builder->expr()->eq('a.fromUser', ':user'),
))
->setParameters([
'message' => '%' . $word . '%',
'user' => $user,
])
->getQuery()
->getResult();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.