php – Laravel Collection日期比较

php – Laravel Collection日期比较,第1张

概述好吧所以我一直在寻找答案的时间,但似乎找不到答案. 我在不同的日期都有一系列“订单”.我得到了本周的所有订单,这不应该是一个问题,然后我想要一周的每一天的标签. 到目前为止我尝试过的是: $dinnerOrders->where('date','>',$date)->where('date','<', $date->endOfDay())->sortBy('created_at'); $date是 好吧所以我一直在寻找答案的时间,但似乎找不到答案.
我在不同的日期都有一系列“订单”.我得到了本周的所有订单,这不应该是一个问题,然后我想要一周的每一天的标签.

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

$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终端工作,空集.

所以我要问的是,你能否对一个系列进行日期比较?如果是这样,怎么样?

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

对于集合,where()方法不接受运算符.它只进行相等比较.第一个参数是键,第二个是值,第三个是布尔值来标记松散比较(==)与严格比较(===).

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

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

发布问题编辑

根据你编辑中提供的代码,我猜一家餐馆有很多晚餐,晚餐有很多订单.如果这是正确的,您可以建立一个关系,表明餐厅通过晚餐有多个订单:

Restaurant.PHP:

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

通过此关系设置,您可以使用查询构建器获取您的信息:

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

以上是内存溢出为你收集整理的php – Laravel Collection日期比较全部内容,希望文章能够帮你解决php – Laravel Collection日期比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1265350.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存