PHP原则查询,并带有或或

问题描述 投票:0回答:1

一个数据库的产品具有很多选项,其中两个是选项1和选项2。我需要进行查询(我知道如何构建整个产品,我只遵循以下逻辑)仅在以下位置显示此类产品:

  1. 如果未同时选择选项1和选项2,则显示所有产品
  2. 如果选择了选项1,则仅显示具有此选项的产品
  3. 如果选择了选项2,则仅显示具有此选项的产品
  4. 如果选择了选项1和选项2,则仅显示具有这两个选项的产品

我尝试过:

function GetProducts(keywords) {
...
    ->andWhere($qb->expr()->orX(
        $qb->expr()->eq('option1', keywords['option1']),
        $qb->expr()->eq('option2', keywords['option2'])
    ))
...
}

关键字['option1']和关键字['option2']是带有此类选项的复选框中的值0或1。

但是结果如下:

  1. 如果未同时选择选项1和选项2,则显示所有产品-确定
  2. 如果选择了选项1,则显示带有选项1的产品以及所有没有这两个选项的产品-不是我所需要的
  3. 如果选择了选项2,则显示带有选项1的产品以及所有没有这两个选项的产品-不是我所需要的
  4. 如果选择了选项1和选项2,则显示所有产品-不是我所需要的
php doctrine-query
1个回答
0
投票
public function getRandomSearch($keywords)
{
    $em = DatabaseORM::entityManager();
    $qb = $em->createQueryBuilder();
    $qb->select('c')
        ->from('Products\Product', 'c');

    if ($keywords['option1'] && !$keywords['option2']) {
        $qb->andWhere($qb->expr()->eq('c.option1', $keywords['option1']));
    }
    elseif (!$keywords['option1'] && $keywords['option2']) {
        $qb->andWhere($qb->expr()->eq('c.option2', $keywords['option2']));
    }
    elseif ($keywords['option1'] && $keywords['option2']) {
        $qb->andWhere($qb->expr()->orX(
            $qb->expr()->eq('c.option1', $keywords['option1']),
            $qb->expr()->eq('c.option2', $keywords['option2'])
        ));
    }

    return $qb->getQuery()
        ->getResult();
}
© www.soinside.com 2019 - 2024. All rights reserved.