Eloquent - 按天获取记录

Léo*_*oco 3 php laravel eloquent php-carbon

我有一个代表某些事件的数据库记录列表。每个都有一个start_time包含以下格式的日期的列:2017-10-28 22:00:00。我希望能够start_time使用 Laravel 获取列为星期五的所有记录。像这样的东西:

$fridayEvents = $q->whereDate('start_time', '=', isFriday());
Run Code Online (Sandbox Code Playgroud)

isFriday()但我在用 Carbon进行创作时遇到了困难。

Eli*_*res 5

MySQL(和其他 SQL)实现WEEKDAY()函数,该函数从日期中提取工作日:

\n\n
\n

工作日(日期

\n\n

返回日期的工作日索引(0 = 星期一,1 = 星期二,\xe2\x80\xa6 6 =\n 星期日)。

\n\n
mysql> SELECT WEEKDAY(\'2008-02-03 22:23:00\');\n        -> 6\nmysql> SELECT WEEKDAY(\'2007-11-06\');\n        -> 1\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

所以你可以做这样的查询:

\n\n
$q->whereRaw(\'WEEKDAY(your_table_name.start_date) = 4\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

这种方式比使用 Carbon 直接在 PHP 上过滤结果更有效:

\n\n
    \n
  • 您将使用比 PHP 上的 Carbon 更快的本机数据库函数处理数据。
  • \n
  • 只有相关数据才会从数据库传输到 PHP,从而减少查询时间和内存使用量
  • \n
\n\n

为了获得最佳性能,您需要创建一个列来存储工作日,这样您的数据库将能够使用索引来避免全表扫描,从而为您提供最佳性能。

\n