Запустите метод или команду, когда срок действия строки истек Laravel

У меня есть таблица, в которой есть пользовательские публикации, когда пользователь публикует публикации, он выбирает дату, когда эта публикация останется видимой на платформе, я хочу, чтобы можно было перевернуть состояние публикации, настало время, чтобы она отображалась больше ( дата публикации равна или больше, чем система дат), я знаю о способе cronjob, но я хотел спросить здесь, есть ли лучший способ сделать это, потому что я думаю, что способ cronjob не подходит для этого, мне придется запустить команду каждую минуту, чего я предпочитаю не делать, мне нужны только идеи, а не код.

Спасибо.

Если вы просто хотите показать этот срок действия во внешнем интерфейсе, вам не нужен CRON, простой расчет во время отображения данных справится с этим. В противном случае вы можете создать CRON и запускать его только в 23:59, нет необходимости запускать этот CRON каждую минуту.

Mayank Pandeyz 15.03.2019 10:58

Вы можете написать фоновый процесс, который делает то же самое.

online Thomas 15.03.2019 10:58

@MayankPandeyz Мне нужно запускать CRON каждую минуту, потому что пользователь выбирает точное время, когда его публикация перестанет появляться на платформе, для внешнего предложения да, это сработает, но я предпочитаю удалять эти условия из представлений настолько, насколько я могу.

ayoubelmoudni 15.03.2019 11:07

@Thomas «фоновый процесс» - это CRON

ayoubelmoudni 15.03.2019 11:08

да, но он будет более отзывчивым, чем раз в минуту.

online Thomas 15.03.2019 11:09

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

ayoubelmoudni 15.03.2019 11:10

Я согласен, тогда у вас может не быть много других вариантов, кроме cronjob.

online Thomas 15.03.2019 11:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
7
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не храните флаг active в базе данных. В вашем случае active является производным атрибутом, и производные атрибуты на самом деле не должны храниться в виде столбцов, не говоря уже о том, что, поскольку active будет основан на дате, он функционально не зависит от первичного ключа напрямую, поэтому также нарушает 2-й нормальный форма. Эти две причины обычно приводят к аномалиям данных, и то, что вы пытаетесь сделать с запланированной задачей, — это, по сути, обход этих аномалий.

Мой предлагаемый подход заключается в использовании красноречивого атрибута модели и мутаторов атрибутов, как показано ниже:

class Publication extends Model {
     protected $appends = [ 'active' ];

     public function getActiveAttribute() {
         return $this->activeUntil < Carbon::now(); //Still active
     }
}

Таким образом, ваша модель включает атрибут active, который вычисляется Eloquent и не сохраняется в базе данных.

Другие вопросы по теме