我正在使用Laravel 5.4
。我有一个代表一些事件的记录列表。我希望能够获得列start_time
是本周五的记录。
注意:start_time
包含此格式的日期2017-10-28 22:00:00
$fridayEvents = $q->whereDate('start_time', '=', isFriday);
我很难用碳创建isFriday
答案 0 :(得分:2)
MySQL(和其他SQL)实现从日期中提取工作日的WEEKDAY()函数:
WEEKDAY(的日期强>)
返回日期的工作日索引(0 =星期一,1 =星期二,... = 6 = 星期日)。
mysql> SELECT WEEKDAY('2008-02-03 22:23:00'); -> 6 mysql> SELECT WEEKDAY('2007-11-06'); -> 1
所以你可以这样做一个查询:
$q->whereRaw('WEEKDAY(your_table_name.start_date) = 4')
这种方法比使用Carbon直接在PHP上过滤结果更有效:
要获得最佳性能,您需要创建一个列来存储工作日,这样您的数据库就可以使用索引来避免全表扫描,从而为您提供最佳性能。
答案 1 :(得分:1)
whereDate()
只会查看日期,因此您无法通过whereDate()
为了实现你的目标,你需要执行几个操作,我使用的是伪代码,因为我不知道你是如何查询的。
$records = Event::get();
$filteredArray = array();
foreach($records as $record){
if(Carbon::parse($record->start_time)->dayOfWeek == Carbon::FRIDAY || Carbon::parse($record->start_time)->dayOfWeek == Carbon::SATURDAY){
$fillteredArray[]= $record;
}
}
我希望它有所帮助:)