Php 如何在两个字符串值之间绑定datetime字段
我有这样的方法:Php 如何在两个字符串值之间绑定datetime字段,php,mysql,datetime,doctrine-orm,Php,Mysql,Datetime,Doctrine Orm,我有这样的方法: public function getCustomDateOrders(string $startDay,string $endDay,string $food) :array { $result = $this->_em->createQueryBuilder() ->select ( 'OrderEntity.name' 'OrderEntity.created'
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();
}
公共函数getCustomDateOrders(字符串$startDay,字符串$endDay,字符串$food):数组
{
$result=$this->\u em->createQueryBuilder()
->挑选
(
'OrderEntity.name'
“OrderEntity.created”
)
->从($this->entityClass,'OrderEntity')
->左连接(
“目录\食物”,
“食物”,
"与",,
'Food.id=OrderEntity.FoodId'
)
->其中(“Food.id=:Food”)
->andWhere(“OrderEntity.status=:active”)
->andWhere(“开始日期:结束日期”)
->getQuery()
->设置参数([
“食品”=>美元食品,
“活动”=>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
之间。如何解决此问题?在之间使用:
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();
}
这就是为什么我们不将日期存储为字符串。您仍然可以在查询中转换字符串,因此不要只是关闭计算机
使用str\u to\u date()
:
让我们将其转换为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')
从表格中选择*
创建位置>起始日期(开始日期,%Y-%m-%d%H:%i:%s)
并创建了
好了。给我在开始日期之后和结束日期之前创建的所有行
更好的方法可能是将字符串转换为日期,并像sugested一样在之间使用