雄辩 - 白天获取记录

时间:2017-10-13 03:41:28

标签: laravel laravel-5 eloquent php-carbon

我正在使用Laravel 5.4。我有一个代表一些事件的记录列表。我希望能够获得列start_time是本周五的记录。

注意:start_time包含此格式的日期2017-10-28 22:00:00

$fridayEvents = $q->whereDate('start_time', '=', isFriday);

问题

我很难用碳创建isFriday

2 个答案:

答案 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上过滤结果更有效:

  • 您将使用本机数据库函数处理数据,这些函数比使用Carbon而不是PHP更快。
  • 只有相关数据才会从数据库传输到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;
    }
}

我希望它有所帮助:)