@Muvka

Лучше разобраться с cron или силами одного PHP?

Здравствуйте. Есть такая задача. Каждую пятницу и до воскресенья мне нужно в одной категории автоматом устанавливать скидки на товары. В воскресенье, соответственно, скидки должны пропадать. У меня такой вопрос, насколько плох или хорош мой вариант, без использования cron(не имел дел, надеюсь правильно понимаю, что он позволяет сделать). Так вот, у товаров я создаю доп поле для цены со скидкой, которая должна устанавливаться в нужное мне время. Затем первый пользователь, который зайдет в пятницу, запустит скрипт, который применит эту цену в sale_price и запишет в транзиентный кэш(который в бд) инфу, что мол цены установлены и больше не нужно этого делать, на 2 дня. И, соотвественно, в воскресенье будет то же самое, только цены удалятся из sale_price и запишется другая инфа, что не нужно больше удалять скидку. Надеюсь понятно изложил свою мысль)
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Ваш план плохо масштабируется - в вопросе неизвестно сколько будет выполняться ваш запрос, и будут ли тормоза у пользователя. И что будет через месяц, через год, если товаров станет больше.

В то время как крон вы можете поставить в то время, когда не выполняются бэкапы, когда на сервере минимальная активность, и выполнение может быть контролируемым, с логированием, с расширенным функционалом.

Сама идея обновлять данные при активности какого-либо пользователя - вполне нормальная, просто не для вашего случая. Она для случая, когда нужно обновлять небольшой блок данных.

P.S. А разобраться с крон в любом случае необходимо - это стандартный и популярный инструмент. Разобравшись с крон вы будете лучше понимать когда его использовать, а когда нет, а не отталкиваться от того, тут же разбираться надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Ваш план, простите, говно. Либо крон, либо храните в базе дату и время действия скидки и проверяйте ее оттуда
Ответ написан
sandu2d
@sandu2d
Человек
Легко можно сделать что-то такое и значения для $discountDays брать из БД:
<?php

$discountDays = ['Friday', 'Saturday', 'Sunday'];

function isDiscountDay(array $discountDays): bool
{
    return in_array(date('l'), $discountDays);
}
Ответ написан
@ipokos
А что если у вас товар "А", есть в категории для скидок и в обычной категории, а вы цену обновили в БД?
Оба варианта мне не нравятся. Но из двух предложенных вариантов, менее плохой с кроном. Разобраться с кроном и настроить его займет часа пол.
Ответ написан
Если скидки одинаковы для всех товаров, тогда может есть смысл сделать скидку в корзине на все товары этой категории и инициировать ее только по выходным, а на сайте выкидывать сообщение, что сегодня скидка на товары такой категории

Тогда, крон не нужен, в базе ничего не меняется, список категорий масштабируется, список скидок для категорий масштабируется.

Как такая идея?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы