Doctrine orm 在ZF2服务中提供意外结果的条令查询

Doctrine orm 在ZF2服务中提供意外结果的条令查询,doctrine-orm,Doctrine Orm,我从下面的条令查询中收到意外结果。我不确定原因 这是我正在尝试创建的查询: SELECT `subscription_reference` FROM `member_subscriptions` WHERE `list` = 1 AND `quantity` = 1 AND `payment_received` = 1 AND `email` = 'user@domain.com' AND `subscription_consent_date` != '0000-00-0

我从下面的条令查询中收到意外结果。我不确定原因

这是我正在尝试创建的查询:

SELECT `subscription_reference` 
FROM `member_subscriptions` 
WHERE `list` = 1 AND `quantity` = 1 
    AND `payment_received` = 1 AND `email` = 'user@domain.com' 
    AND `subscription_consent_date` != '0000-00-00 00:00:00' 
    AND ( ( `subscription_expires` = '0000-00-00' ) 
         OR ( '2015-01-22' <= `subscription_expires` ) )
这是条令查询生成的示例结果:

subscription_reference 38
member_reference 6
list 1
quantity 1  
payment_received 1
email user@domain.com
subscription_consent_reference  0
subscription_consent_date 0000-00-00 00:00:00
subscription_consent_ip_address 
subscription_consent_granted_name   
subscription_begins 2005-11-05
subscription_expires 2014-06-30
email_delivery_hour 0
email_delivery_timezone_reference 241
last_mailing 2014-06-30
administrator_update_reference 0
administrator_update_timestamp 0000-00-00 00:00:00
意外的结果是:

  • 认购\同意\日期的值为“0000-00-00:00:00”

    • 我需要它有一个实际的日期,比如“2005-11-05 11:30:34”
  • 认购到期,价值为“2014-06-30”

    • 我需要将此日期设置为未来或“0000-00-00”(表示订阅正在进行)
  • 多订阅用户参考

    • 正在选择多个订阅,而不是我试图描述的订阅。我希望查询中给出的电子邮件地址与所有其他订阅者隔离

  • 有人能告诉我如何改正我犯的错误吗?谢谢。

    s.subscriptionExpires的两种可能性需要在相同的“andWhere”范围内

    我收到了以下代码,以查看创建的查询是为了解决问题:

    $q = $query1->getQuery();
    $sql = $q->getSQL();
    print_r( $sql );
    
                    $query1 = $this->entityManager
                        ->createQueryBuilder()
                        ->select('s.subscriptionReference')
                        ->from(
                            'AMDatabase\Entity\Membership\MemberSubscriptions',
                            's'
                        );
    
                    $query1
                        ->andWhere(
                            $query1->expr()
                                  ->eq(
                                      's.list',
                                      ':list'
                                  )
                        )
                        ->setParameter(
                            'list',
                            1
                        );
    
                    $query1
                        ->andWhere(
                            $query1->expr()
                                   ->eq(
                                       's.quantity',
                                       ':quantity'
                                   )
                        )
                        ->setParameter(
                            'quantity',
                            1
                        );
    
                    $query1
                        ->andWhere(
                            $query1->expr()
                                   ->eq(
                                       's.paymentReceived',
                                       ':paymentReceived'
                                   )
                        )
                        ->setParameter(
                            'paymentReceived',
                            1
                        );
    
                    $query1
                        ->andWhere(
                            $query1->expr()
                                   ->eq(
                                       's.email',
                                       ':email'
                                   )
                        )
                        ->setParameter(
                            'email',
                            $params['email_address']
                        );
    
                    $query1
                        ->andWhere(
                            $query1->expr()
                                   ->notLike(
                                       's.subscriptionConsentDate',
                                       ':subscriptionConsentDate'
                                   )
                        )
                        ->setParameter(
                            'subscriptionConsentDate',
                            new \DateTime('0000-00-00 00:00:00')
                        );
    
                    $query1
                        ->andWhere('s.subscriptionExpires = :subscriptionExpires1 OR s.subscriptionExpires >= :subscriptionExpires2')
                        ->setParameter(
                            'subscriptionExpires1',
                            '0000-00-00'
                        )
                        ->setParameter(
                            'subscriptionExpires2',
                            gmdate('Y-m-d')
                        );
    
                    $result1 = $query1->getQuery()
                                    ->getArrayResult();
    
    $q = $query1->getQuery();
    $sql = $q->getSQL();
    print_r( $sql );