我删除的记录没有被过滤掉。
原则查询生成器表达式为:
$q = $this->createQueryBuilder('duty')
->select(array('duty'))
->where('duty.validFrom < CURRENT_TIMESTAMP() AND (duty.deleted IS NULL OR duty.deleted > CURRENT_TIMESTAMP())')
->orderBy('duty.rank', 'ASC')
->addOrderBy('duty.validFrom', 'DESC')
->getQuery();
我得到了 6 个结果(半小时前删除了一个结果。
我拿起一个调试器并评估$q->getSQL((。它给了我:
SELECT e0_.id AS id_0, e0_.name AS name_1, e0_.rank AS rank_2, e0_.rate AS rate_3, e0_.validFrom AS validfrom_4, e0_.deleted AS deleted_5, e0_.created AS created_6, e0_.updated AS updated_7
FROM employmentduty e0_
WHERE e0_.validFrom < CURRENT_TIMESTAMP
AND (e0_.deleted IS NULL OR e0_.deleted > CURRENT_TIMESTAMP)
ORDER BY e0_.rank ASC, e0_.validFrom DESC
我直接针对 postgres 运行并得到 5 个结果,删除的项目被过滤掉。
php 的时区是 'Australia/Sydney',postgres 时区 ( show timezone
( 设置为 Etc/GMT-10
。
我在postgresql.conf中设置了timezone = 'Australia/Sydney'
,以便时区与PHP设置匹配。此应用程序只有一个时区,所以这很好。
日期当然是使用 ->setDeleted(new DateTime())
设置的,它使用 php 现在的概念,而查询是用 CURRENT_TIMESTAMP 完成的,这是不一致的原因。