Нужен совет, возможно решить мою проблему кешированием или как то по другому.
Есть самодельная Learning Management System очень скудного функционала под 200-300 пользователей.
Но вот проблема, чтобы в топбаре показать уведомления, непрочитанные внутренние сообщения, прогресс обучения и онлайн обучающихся, я загнал все это в ViewComposer и в результате получилось 90 запросов к бд при каждом запросе страниц.
Вот вывод из debugbar bit.ly/32JR86a.
Как решаются такие вопросы? Ведь вывод всей этой информации — типовая задача для многих проектов, а я велосипед изобретаю с квадратными колесами. Вот класс компосера:
class ShareComposer
{
protected $user;
protected $profile;
protected $notifications;
public function __construct()
{
$this->user = Auth::user();
if ($this->user != null) {
$this->notifications = $this->user->unreadNotifications;
}
}
public function compose(View $view)
{
if ($this->user != null) {
$roles = $this->user->getRoleNames();
$unreadMessagesCount = $this->user->unreadMessagesCount();
$unreadThreads = Thread::forUserWithNewMessages(Auth::id())->latest('updated_at')->get();
if ($roles->contains('administrator')) {
$homeworksResultsCount = HomeWorkResult::where('accepted', 0)->where('checked', 0)->count();
$guestsCount = Guest::where('accepted', 0)->where('checked', 0)->count();
$view->with([
'user' => $this->user,
'notifications' => $this->notifications,
'unreadMessagesCount' => $unreadMessagesCount,
'homeworkResultsCount' => $homeworksResultsCount,
'guestsCount' => $guestsCount,
'unreadThreads' => $unreadThreads
]);
}
if ($roles->contains('student')) {
$current_lesson = User::find($this->user->id)->lessons()->orderBy('position', 'desc')->first();
$current_lesson_id = $current_lesson->id;
$time_to_learn = $current_lesson->time_to_learn;
$lesson_student = DB::table('lesson_student')->where('user_id', $this->user->id)->where('lesson_id', $current_lesson_id)->get();
$start_time = Carbon::parse($lesson_student->pluck('created_at')[0]);
$end_time = $start_time->addDays($time_to_learn);
$date_now = Carbon::today();
$remain_days = $end_time->diffInDays($date_now);
$view->with([
'user' => $this->user,
'notifications' => $this->notifications,
'unreadMessagesCount' => $unreadMessagesCount,
'remain_days' => $remain_days,
'unreadThreads' => $unreadThreads
]);
}
if ($roles->contains('user')) {
$view->with([
'user' => $this->user,
'notifications' => $this->notifications,
'unreadMessagesCount' => $unreadMessagesCount,
'unreadThreads' => $unreadThreads
]);
}
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть две таблицы sql: Одна с заказами, а другая со статусами заказов:
Есть у меня в программе функция отключения уведомлений по заданому времениТо есть условие такое, если current hour == 12 отключаю