По дням меняют домашнюю страницу или результаты - PullRequest
0 голосов
/ 18 мая 2019

У меня есть две таблицы, дни и сообщения.
Таблица дней

id  |  day  
----------
1   | Day1
2   | Day2
3   | Day3
4   | Day4
5   | Day5
6   | Day6
7   | Day7
8   | Day8
9   | Day9
10  | Day10
11  | Day11
12  | Day12


Таблица сообщений

id  |  day  |  posts
---------------------------
1   | 1    |  Day1Text
2   | 1    |  Day1Text
1   | 1    |  Day1Text
2   | 2    |  Day2Text
1   | 2    |  Day2Text
2   | 3    |  Day3Text
1   | 4    |  Day4Text
2   | 5    |  Day5Text

У меня 12 дней, и у каждого дня разные сообщения, каждый день в 10.00 это изменение, например, Сегодня (День1) и будут появляться только сообщения за 1 день. Завтра в 10.00 появятся сообщения второго дня. Когда закончится 12-й день, этот цикл вернется к началу и снова начнется 1-й день. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Во-первых, вы хотите знать, как циклически проходить посты с течением времени. В качестве входных данных нам нужно как минимум 12 разных дней, чтобы мы могли использовать текущий день месяца или года. Если мы возьмем день года:

Carbon::now()->dayOfYear  //e.g. int(137)

Теперь мы можем рассчитать его мод по количеству постов, которые всегда будут возвращать число от 0 до 11. Если мы добавим 1, у нас будет число от 1 до 12. E.g:

137 % 12 = 5  // 5 + 1 = 6
120 % 12 = 0  // 0 + 1 = 1
347 % 12 = 11 // 11 + 1 = 12

На данный момент мы знаем, какой пост нам нужно отображать каждый день, но мы не контролируем время, в которое он должен отображаться. Чтобы это исправить, одним из способов было бы учесть изменение дней в то время, когда вы хотите, чтобы посты менялись, выравнивание обоих облегчает задачу. Поскольку мы не хотим смещать часовой пояс сервера, мы можем просто сместить дату, которую мы выбрали, на 10 часов, что означает, что новый день начнется, как только текущий день достигнет 10 часов утра.

Carbon::now()->subHours(10)->dayOfYear

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

0 голосов
/ 18 мая 2019

Судя по всему, вам действительно не нужен оператор if, поэтому для этого вы можете либо использовать englishDayOfWeek getter , либо просто использовать php's формат даты

т.е.

$results = Post::where('Day', now()->englishDayOfWeek)->get()

или

$results = Post::where('Day', now()->format('l'))->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...