gpt4 book ai didi

mysql - Doctrine orWhere 用于多列

转载 作者:行者123 更新时间:2023-11-29 23:46:09 29 4
gpt4 key购买 nike

我需要使用原则获取,我的实体有三个日期值,expiryDate、scheduledDate、addedDate(强制)。我需要首先检查是否有任何行的 ScheduleDate 为今天,如果没有,那么我需要检查 expiryDate 之前的条目是否具有最新的添加日期。 我尝试这段代码,

public function getLatestEntry(){
$today = date("Y-m-d");
$qb = $this->em->createQueryBuilder();
$qb ->select('MyEntry')
->from('MyEntry', 'myEntry')
->Where('myEntry.scheduledOn = :today')
->orWhere('myEntry.expirationDate >= :today')
->orWhere('myEntry.expirationDate is null')
->orderby('myEntry.addedDate')
->setMaxResults(1)
->setParameters(array('today' => $today));

return $qb->getQuery()->getResult();
}

但是我没有得到我期望的结果,我感觉第一个条件被忽略了,我该如何解决这个问题?

最佳答案

现在您有 3 个同等优先级的条件。如果其中之一为真,则获取该行。但您希望您的条件具有不同的优先级。第一个匹配或不匹配,第二个匹配。并不是说您的第三个条件是第二个条件的一部分:

$qb ->select('MyEntry')
->from('MyEntry', 'myEntry')
->Where('myEntry.scheduledOn = :today')
->orWhere('(myEntry.scheduledOn != :today AND (myEntry.expirationDate >= :today OR myEntry.expirationDate IS NULL))')
->orderby('myEntry.addedDate')
->setMaxResults(1)
->setParameters(array('today' => $today));

编辑:我不太确定您是否希望将过期日期为 NULL 的条目与设置了过期日期的条目同等对待。如果它对您来说不相等,您可以更改您的 ORDER BY 子句,例如

->orderby('myEntry.addedDate', 'ASC')
->addOrderBy('my.Entry.expirationDate', 'DESC')

关于mysql - Doctrine orWhere 用于多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929006/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com