Laravel Query在datetime列上使用yyyy-mm - dd值

时间:2016-04-12 14:52:04

标签: mysql laravel

我使用laravel查询构建器编写了以下查询。我试图获取userID,activityID和日期的列中的字段数。它是导致问题的日期字段输入。我希望能够返回与我传入的日期值具有相同日期的所有字段。下面是我的代码。

$points = DB:: table("users_has_activities")
-> where("activitiesID", "=", $this->activityID)
-> where("usersID", "=", $userID)
-> where("time", "=", $date)
-> count();

$ date将是" 2016-04-10"之类的值,我表格中的字段将具有类似于' 2016-04-10 21:01:27' 。我需要能够获取日期值的日期与表中日期时间值的日期相匹配的所有字段。

2 个答案:

答案 0 :(得分:1)

您可以使用whereDay()方法从DATE类型中获取DATETIME

$points = DB:: table("users_has_activities")
-> where("activitiesID", "=", $this->activityID)
-> where("usersID", "=", $userID)
-> whereDay("time", "=", $date)
-> count();

答案 1 :(得分:0)

处理此问题的最佳方法是whereBetween,因为它可以使用数据库索引,并且不需要对数据库中的每一行进行计算:

$points = DB:: table("users_has_activities")
-> where("activitiesID", "=", $this->activityID)
-> where("usersID", "=", $userID)
-> whereBetween("time", '2016-04-12 00:00:00', '2016-04-12 23:59:59')
-> count();

Laravel捆绑的Carbon可以方便地生成这些日期。如果您的列标记为日期(请参阅https://laravel.com/docs/5.2/eloquent-mutators#date-mutators),那么它们将成为碳对象:

$start = $date->copy()->startOfDay();
$end = $date->copy()->endOfDay();