当我尝试这个 Eloquent 查询时,当我期待 217
时,我得到 0
结果:
OrderItem::whereBetween(
'created_at',
[
DB::raw("CONVERT_TZ('$start_date 09:00:00', '+00:00', '-06:00')"),
DB::raw("CONVERT_TZ('$end_date 18:00:00', '+00:00', '-06:00')")
]
)->count();
如果我在上面执行DB::getQueryLog()
,复制编译的查询以使用 MySQL Workbench 在数据库上原始执行它,然后我得到预期结果 217。
select count(*) as aggregate
from `order_items`
where
`created_at` between
CONVERT_TZ('2016-02-17 09:00:00', '+00:00', '-06:00') and
CONVERT_TZ('2016-02-29 18:00:00', '+00:00', '-06:00')
这是该查询日志的 var 转储:
array (3) [
'query' => string (82) "select count(*) as aggregate from `order_items` where `created_at` between ? and ?"
'bindings' => array (2) [
Illuminate\Database\Query\Expression (1) (
protected value -> string (53) "CONVERT_TZ('2016-02-17 09:00:00', '+00:00', '-06:00')"
)
Illuminate\Database\Query\Expression (1) (
protected value -> string (53) "CONVERT_TZ('2016-02-29 18:00:00', '+00:00', '-06:00')"
)
]
'time' => float 0.41
]
什么可能会阻止 Eloquent 实现正常工作?
最佳答案
在您的查询中
OrderItem::whereBetween(
'created_at',
[
DB::raw("CONVERT_TZ('$date 09:00:00', '+00:00', '-06:00')"),
DB::raw("CONVERT_TZ('$date 18:00:00', '+00:00', '-06:00')")
]
)->count();
我看到你使用了 $date 两次。所以 Laravel 生成的 SQL 命令如下所示:
select count(*) as aggregate from `order_items` where between CONVERT_TZ('2016-02-10 09:00:00', '+00:00', '-06:00') and CONVERT_TZ('2016-02-10 18:00:00', '+00:00', '-06:00');
您将在查询中得到相同的日期,该日期与复制sql命令时提到的不同。
我没有看到任何在这里不起作用的东西
关于php - 查询不能在 PHP 中运行,但可以直接在 MySQL 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714968/