筛选日期时记录错误
Wrong records when filtering date
我在按日期筛选相关模型时遇到奇怪的问题,
考虑这段代码:
function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
});
}
if ($request->has('deposit_at_to')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
});
}
}
如果我过滤昨天日期 17/02/20;它 returns 结果也是今天 18/02/20
如果我过滤 16/02/20 它也 returns 17 和 18,
它只发生在所有相关模型过滤中
您正在搜索范围,因此您得到多个日期是合乎逻辑的。同样在输入时,您需要将两个日期都设置为限制范围的下限和上限。在您的设置中,您需要同时发送 16/02/20 和 17/02/20 以接收 16/02/20 的记录。
因此,如果您需要获得特定范围,请检查这两个值是否可用。
if ($request->has('deposit_at_from') && $request->has('deposit_at_to') {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
}
或者只使用一个字段进行日期过滤,如果您想要单个日期结果并进行原始过滤:
$query->where(DB::raw("DATE(created_at) = '".date('Y-m-d', $request->input('deposit_date')."'"));
删除大于号和小于号,以便您可以获得特定日期的结果
function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '=', $request->input('deposit_at_from'));
});
}
if ($request->has('deposit_at_to')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '=', $request->input('deposit_at_to'));
});
}
}
抱歉,伙计们,但我想通了,这对我来说很有效:
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to'));
})
如果您想知道 laravel 版本是 5.6,
谢谢大家:-))
我在按日期筛选相关模型时遇到奇怪的问题, 考虑这段代码:
function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
});
}
if ($request->has('deposit_at_to')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
});
}
}
如果我过滤昨天日期 17/02/20;它 returns 结果也是今天 18/02/20 如果我过滤 16/02/20 它也 returns 17 和 18, 它只发生在所有相关模型过滤中
您正在搜索范围,因此您得到多个日期是合乎逻辑的。同样在输入时,您需要将两个日期都设置为限制范围的下限和上限。在您的设置中,您需要同时发送 16/02/20 和 17/02/20 以接收 16/02/20 的记录。
因此,如果您需要获得特定范围,请检查这两个值是否可用。
if ($request->has('deposit_at_from') && $request->has('deposit_at_to') {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'));
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '<=', $request->input('deposit_at_to'));
}
或者只使用一个字段进行日期过滤,如果您想要单个日期结果并进行原始过滤:
$query->where(DB::raw("DATE(created_at) = '".date('Y-m-d', $request->input('deposit_date')."'"));
删除大于号和小于号,以便您可以获得特定日期的结果
function applyDepositOnRangeFilter($query, $request)
{
if ($request->has('deposit_at_from')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '=', $request->input('deposit_at_from'));
});
}
if ($request->has('deposit_at_to')) {
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '=', $request->input('deposit_at_to'));
});
}
}
抱歉,伙计们,但我想通了,这对我来说很有效:
$query->whereHas('deposits', function ($query) use ($request) {
$query->whereDate('created_at', '>=', $request->input('deposit_at_from'))
->whereDate('created_at', '<=', $request->input('deposit_at_to'));
})
如果您想知道 laravel 版本是 5.6,
谢谢大家:-))