How to use andWhere and orWhere in Doctrine?

前端 未结 4 1919
萌比男神i
萌比男神i 2020-12-05 22:40
WHERE a = 1 AND (b = 1 Or b = 2) AND (c = 1 OR c = 2)

How can i make this in Doctrine?

$q->where(\"a = 1\");
$q->andWhere(\"b         


        
相关标签:
4条回答
  • 2020-12-05 22:53

    Here's an example for those who have more complicated conditions and using Doctrine 2.* with QueryBuilder:

    $qb->where('o.foo = 1')
       ->andWhere($qb->expr()->orX(
          $qb->expr()->eq('o.bar', 1),
          $qb->expr()->eq('o.bar', 2)
       ))
      ;
    

    Those are expressions mentioned in Czechnology answer.

    0 讨论(0)
  • 2020-12-05 22:55

    Why not just

    $q->where("a = 1");
    $q->andWhere("b = 1 OR b = 2");
    $q->andWhere("c = 1 OR d = 2");
    

    EDIT: You can also use the Expr class (Doctrine2).

    0 讨论(0)
  • 2020-12-05 23:11
    $q->where("a = 1")
      ->andWhere("b = 1 OR b = 2")
      ->andWhere("c = 2 OR c = 2")
      ;
    
    0 讨论(0)
  • 2020-12-05 23:14

    One thing missing here: if you have a varying number of elements that you want to put together to something like

    WHERE [...] AND (field LIKE '%abc%' OR field LIKE '%def%')
    

    and dont want to assemble a DQL-String yourself, you can use the orX mentioned above like this:

    $patterns = ['abc', 'def'];
    $orStatements = $qb->expr()->orX();
    foreach ($patterns as $pattern) {
        $orStatements->add(
            $qb->expr()->like('field', $qb->expr()->literal('%' . $pattern . '%'))
        );
    }
    $qb->andWhere($orStatements);
    
    0 讨论(0)
提交回复
热议问题