php - Laravel Collection 日期比较

标签 php laravel laravel-5 php-carbon laravel-collection

好吧,我花了几个小时寻找答案,但似乎找不到。 我有一系列不同日期的“订单”。我收到了本周的所有订单,这应该不是问题,然后我想为一周中的每一天创建一个标签。

到目前为止我尝试过的是:

$dinnerOrders->where('date','>',$date)->where('date','<', $date->endOfDay())->sortBy('created_at');

$date 在哪里:

$dt = Carbon\Carbon::create()->startOfWeek();
Carbon\Carbon::setTestNow($dt);
$date = new Carbon\Carbon('this ' . $day);

$dinnerOrders 的获取方式是:

$dinnerOrders = collect([]);
foreach($restaurant->dinners as $dinner) {
    foreach($dinner->orders as $order) {
        $dinnerOrders[$order->id] = $order;
    }
 }

日期似乎是正确的,并且是 sql 中的单词。这不起作用是因为 $dinnerOrders 是一个集合吗?

我得到的是空集,尽管它在 mysql 终端中工作。

所以我想问的是,您能否对集合进行日期比较?如果是,怎么办?

最佳答案

注意:此答案特定于 Laravel <= 5.2。 Laravel 5.3 更新了 Collection 上的 where() 方法以匹配查询构建器,因此它现在接受一个运算符。


正如您在问题中所述,$dinnerOrders 是一个集合,而不是一个查询。 Collection 上的 where() 方法的工作方式略有不同。

对于集合,where() 方法不接受运算符。它只做平等比较。第一个参数是键,第二个是值,第三个是 bool 值,用于标记松散比较 (==) 与严格比较 (===)。

您正在寻找的是 filter() 方法。您传入一个进行日期比较的闭包。如果 Closure 返回 true,则该项目保留在 Collection 中。如果它返回 false,则该项目将从 Collection 中删除。像这样(只是一个例子,逻辑可能需要调整):

$dinnerOrders = $dinnerOrders->filter(function ($item) use ($date) {
    return (data_get($item, 'date') > $date) && (data_get($item, 'date') < $date->endOfDay());
});

发布问题编辑

根据您编辑中提供的代码,我猜测餐厅有很多晚餐,而晚餐有很多订单。如果这是正确的,您可以建立一个关系,说明餐厅在晚餐期间有许多订单:

餐厅.php:

public function orders() {
    // restaurant has many orders through dinners
    $this->hasManyThrough('App\Order', 'App\Dinner');
}

有了这个关系设置,您就可以使用查询构建器获取您的信息:

$dinnerOrders = $restaurant->orders()->where('date','>',$date)->where('date','<', $date->endOfDay())->get();

关于php - Laravel Collection 日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806518/

相关文章:

php - 更改日期格式 laravel 5

php - 在 woocommerce 中设置自定义订单状态

php - laravel 中针对特定格式的 TIme 格式验证

php - 从数据库中回显嵌入的 YouTube 视频

php - YouTube API v3获取视频-PHP

组中间件内的 Laravel 组

php - Laravel - 从字符串转换日期和/或时间时转换失败

php - 如何使用 HTTP Client 将图像或文件发送到外部 API?

php - 编辑表时,它会更新数据库中的最后一个条目,而不是选定的条目

php - 结果集(存储过程)为空时获取列名(Laravel)