php - 将日期与 Carbon 进行比较
问题描述
我使用 Laravel Scout 搜索模型,然后使用过滤器获取过去的事件和即将发生的事件。
这是我的方法:
public function search(Request $request)
{
$search = $request->get('q');
// Laravel Scout search() method
$users = User::search($search)->get();
$articles = Article::search($search)->get();
$events = Event::search($search)->get();
$today = Carbon::now();
$upcomingEvents = $events->filter(function ($events) use ($today) {
return Carbon::parse($events->startDate)->gt($today);
});
$pastEvents = $events->filter(function ($events) use ($today) {
return Carbon::parse($events->startDate)->lt($today);
});
$userCount = count($users);
$articleCount = count($articles);
$eventCount = count($events);
$upcomingEventCount = count($upcomingEvents);
$pastEventCount = count($pastEvents);
$templateCount = 0;
return view('pages.search.index', compact('search', 'users', 'articles', 'upcomingEvents', 'pastEvents', 'userCount', 'articleCount', 'upcomingEventCount', 'pastEventCount', 'templateCount'));
}
我在这里阅读了一个教程:https ://scotch.io/tutorials/easier-datetime-in-laravel-and-php-with-carbon
读到这里,我看到你今天,现在,用Carbon::now()
.
还有lt()
小于和gt()
大于。
在我的过滤器中,我抓住了开始日期并将其与它进行了比较,Carbon::now()
但由于某种原因,它没有返回我所期望的。
在我的数据库startDate
中是一个VARCHAR
,但在我的事件模型中,我指定了以下内容:
protected $dates = [
'startDate', 'finishDate'
];
这是我的数据库表:
但在我看来,我明白了:
我用Carbon
错了吗?
解决方案
我不是 100% 确定是否有必要将 DB 中的类型设置为DATE
而不是VARCHAR
.
我只是假设它也适用于VARCHAR
。这意味着通过$dates
在模型中设置数组,您的集合将自动创建该值的 Carbon 实例。
和:
return Carbon::parse($events->startDate)->gt($today);
您正在解析一个已经存在的 Carbon 实例。
请尝试:
return $events->startDate->gt($today);
推荐阅读
- php - PHP - 避免用空格替换'+'
- cassandra - 将高度重复的数据插入 Cassandra 的最佳方法
- c - 为什么我的代码适用于某些测试用例而不适用于其他测试用例
- swift4 - 如何在 5 秒后使用 swift 程序关闭 Apple Watch 警报?
- android - Kotlin - 使用 simpleXML 解析 xml 内联列表
- java - 创建 AndroidStudio 项目时出错
- angular - agm 多边形获取路径
- python - 为加密数据提供的密码
- powershell - 如果 Remove-Item 失败,则退出 PowerShell
- asp.net-core - ASP.NET CORE 托管 - 错误内部服务器错误处理程序“aspNetCore”的模块列表中有一个错误模块“AspNetCoreModule”