我有一种方法可以退还即将到来的付款日期。在下面的示例中,getNextDate()
将返回Carbon日期,如下所示:
Carbon @1549788696 {#1119 ▼
date: 2019-02-10 08:51:36.0 UTC (+00:00)
}
我基本上在数据库中有一堆subscriptions
,并且我只想显示下一个即将到来的付款日期的one
结果。
例如,假设我有三个订阅:
Subscription 1, getNextDate() will return: 2019-02-18
Subscription 2, getNextDate() will return: 2019-02-10
Subscription 3, getNextDate() will return: 2019-02-25
由于Subscription 2
是下一个需要支付的即将到来的付款,因此我只想在视图中的小部件中显示那个。我将如何处理?例如使用过滤器或地图,如下所示?
$subscriptions = auth()->user()->subscriptions()->get();
$filtered = $subscriptions->filter(function ($subscription) {
return $subscription->getNextDate();
});
dd($filtered);
这只会返回所有这些。但是,是否有一种方法可以对其进行过滤,以便仅获得下一个最接近的getNextDate()
的结果?还是我应该以其他方式这样做?任何建议都可以。
PS。 getNextDate()
只需获取start_date
进行订阅,然后计算与Carbon::now()
的月份差额,并检查到现在为止已支付了多少笔款项,然后返回下一个即将到来的付款日期。所以没什么幻想的。
答案 0 :(得分:1)
我认为您不需要在这里使用filter()
。我认为以下应该起作用。
$subscriptions = auth()->user()->subscriptions()->get();
$next = $subscriptions->sortBy(function ($subscription) {
return $subscription->getNextDate()->timestamp;
})->first();
您需要按下一个日期的升序对收藏进行排序,并获得第一项。