Datetime Doctrine2两次之间的标准表达式
我有一个实体“公司”,它的营业时间是一对多的。“开放时间”实体有两个时间类型的字段(开始和结束)。现在我想写一个公司方法“isCurrentlyOpen”,它返回一个布尔值,但我无法得到它 公司Datetime Doctrine2两次之间的标准表达式,datetime,doctrine-orm,Datetime,Doctrine Orm,我有一个实体“公司”,它的营业时间是一对多的。“开放时间”实体有两个时间类型的字段(开始和结束)。现在我想写一个公司方法“isCurrentlyOpen”,它返回一个布尔值,但我无法得到它 公司 class Company { /** * @var \Gastronome\Entity\OpeningHours[] * * @ORM\OneToMany(targetEntity="Gastronome\Entity\OpeningHours", mappe
class Company {
/**
* @var \Gastronome\Entity\OpeningHours[]
*
* @ORM\OneToMany(targetEntity="Gastronome\Entity\OpeningHours", mappedBy="gastronome", fetch="EAGER")
* @ORM\OrderBy({"weekday" = "ASC", "start" = "ASC"})
*/
private $openingHours;
public function getOpeningHours() {
return $this->openingHours;
}
public function getTodaysOpeningHours() {
$criteria = Criteria::create()
->where(Criteria::expr()->eq('weekday', (int) date('w')));
return $this->getOpeningHours()->matching($criteria);
}
public function isCurrentlyOpen() {
$criteria = Criteria::create()
->where(Criteria::expr()->gt('start', new \DateTime()));
->andWhere(Criteria::expr()->lt('end', new \DateTime()));
return count($this->getTodaysOpeningHours()->matching($criteria)) > 0;
}
}
开放小时数
class OpeningHours {
/**
* @ORM\Column(type="time", nullable=false)
*/
private $start;
/**
* @ORM\Column(type="time", nullable=false)
*/
private $end;
/**
* @ORM\Column(type="integer", nullable=false)
*/
private $weekday;
/**
* @var \Gastronome\Entity\Gastronome
*
* @ORM\ManyToOne(targetEntity="Gastronome\Entity\Gastronome", inversedBy="openingHours")
* @ORM\JoinColumn(name="gastronome_id", referencedColumnName="id", nullable=false)
*/
private $gastronome;
}
检查数据库字段值。您的列类型为时间,因此数据只存储时间,不包含日期、时间和时区信息,因此无法与完全日期时间进行比较。数据库字段值例如为“20:00:00”,类型为“时间”。但是我该怎么和这个相比呢?嗯。。。尝试将比较设置为字符串:格式化日期时间并只获取时间部分,例如:
->where(Criteria::expr()->gt('start',$now->format('H:i:s');)代码>希望此帮助已经尝试过,但不幸没有结果…DominikBarann您找到了实现此目的的解决方案吗?我有一个类似的场景,按照@Matteo的建议做了同样的事情,但还没有运气:(