Laravel работает с фильтром коллекции и картой - PullRequest
0 голосов
/ 11 января 2019

У меня есть способ вернуть дату предстоящего платежа. В приведенном ниже примере getNextDate() вернет углеродную дату, например:

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() и проверяет, сколько платежей было сделано до сих пор, а затем возвращает следующую дату предстоящего платежа. Так что ничего особенного там не происходит.

1 Ответ

0 голосов
/ 11 января 2019

Я не думаю, что вам нужно использовать filter() здесь. Я думаю, что следующее должно работать.

$subscriptions = auth()->user()->subscriptions()->get();

$next = $subscriptions->sortBy(function ($subscription) {
    return $subscription->getNextDate()->timestamp;
})->first();

Вам нужно отсортировать свою коллекцию в порядке возрастания следующей даты и получить первый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...