У меня есть таблица, в которой есть пользовательские публикации, когда пользователь публикует публикации, он выбирает дату, когда эта публикация останется видимой на платформе, я хочу, чтобы можно было перевернуть состояние публикации, настало время, чтобы она отображалась больше ( дата публикации равна или больше, чем система дат), я знаю о способе cronjob, но я хотел спросить здесь, есть ли лучший способ сделать это, потому что я думаю, что способ cronjob не подходит для этого, мне придется запустить команду каждую минуту, чего я предпочитаю не делать, мне нужны только идеи, а не код.
Спасибо.
Вы можете написать фоновый процесс, который делает то же самое.
@MayankPandeyz Мне нужно запускать CRON каждую минуту, потому что пользователь выбирает точное время, когда его публикация перестанет появляться на платформе, для внешнего предложения да, это сработает, но я предпочитаю удалять эти условия из представлений настолько, насколько я могу.
@Thomas «фоновый процесс» - это CRON
да, но он будет более отзывчивым, чем раз в минуту.
@ Томас, для базы данных будет много работы, чтобы постоянно просматривать все публикации.
Я согласен, тогда у вас может не быть много других вариантов, кроме cronjob.






Не храните флаг active в базе данных. В вашем случае active является производным атрибутом, и производные атрибуты на самом деле не должны храниться в виде столбцов, не говоря уже о том, что, поскольку active будет основан на дате, он функционально не зависит от первичного ключа напрямую, поэтому также нарушает 2-й нормальный форма. Эти две причины обычно приводят к аномалиям данных, и то, что вы пытаетесь сделать с запланированной задачей, — это, по сути, обход этих аномалий.
Мой предлагаемый подход заключается в использовании красноречивого атрибута модели и мутаторов атрибутов, как показано ниже:
class Publication extends Model {
protected $appends = [ 'active' ];
public function getActiveAttribute() {
return $this->activeUntil < Carbon::now(); //Still active
}
}
Таким образом, ваша модель включает атрибут active, который вычисляется Eloquent и не сохраняется в базе данных.
Если вы просто хотите показать этот срок действия во внешнем интерфейсе, вам не нужен CRON, простой расчет во время отображения данных справится с этим. В противном случае вы можете создать CRON и запускать его только в 23:59, нет необходимости запускать этот CRON каждую минуту.