我有这样的方法:
public function getCustomDateOrders(string $startDay,string $endDay,string $food) :array
{
$result = $this->_em->createQueryBuilder()
->select
(
'OrderEntity.name'
'OrderEntity.created'
)
->from($this->entityClass , 'OrderEntity')
->leftJoin(
'Directory\Food',
'Food',
'with',
'Food.id = OrderEntity.FoodId '
)
->where("Food.id =:food")
->andWhere("OrderEntity.status =:active")
->andWhere("startDate<:OrderEntity.orderCreated >:endDay")
->getQuery()
->setParameters([
"food" => $food,
"active" => 1,
"startDate" => $startDay,
"endDay" => $endDay
])
->getScalerResult();
->getScalarResult();
}
我有几个价值观:
$ startDay 等于"2016-010-17 00:00:00"
(字符串)
$ endDay 等于"2016-10-03 00:00:00"
(字符串)
另外order.created
(order
个字段之一)是 datetime 。
我想从订单实体获取订单,其中已创建的字段位于$startDay
和$endDay
之间。怎么解决?
答案 0 :(得分:2)
使用between
:
public function getCustomDateOrders(string $startDay,string $endDay,string $food) :array
{
$result = $this->_em->createQueryBuilder()
->select
(
'OrderEntity.name'
'OrderEntity.created'
)
->from($this->entityClass , 'OrderEntity')
->leftJoin(
'Directory\Food',
'Food',
'with',
'Food.id = OrderEntity.FoodId '
)
->where("Food.id =:food")
->andWhere("OrderEntity.status =:active")
->andWhere("OrderEntity.orderCreated between :startDay and :endDay")
->setParameters([
"food" => $food,
"active" => 1,
"startDay" => $startDay,
"endDay" => $endDay
])
->getQuery()
->getScalerResult();
}
答案 1 :(得分:0)
这就是为什么我们不将日期存储为字符串。您仍然可以在查询中转换字符串,因此请不要关闭计算机。
使用str_to_date()
function:
让我们把它翻译成SQL:
select * from yourtable
where created > str_to_date(start_day, '%Y-%m-%d %H:%i:%s')
and created < str_to_date(end_day, '%Y-%m-%d %H:%i:%s')
我们走了。给我在start_date之后和结束日期之前创建的所有行。
更好的方法可能是将您的字符串转换为日期,并使用之间的,如同sugested一样。