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一样在之间使用