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
意外的结果是:
- 我需要它有一个实际的日期,比如“2005-11-05 11:30:34”
- 我需要将此日期设置为未来或“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 );