/** * Возвращает объект отзыва или пустой результат. * * Запоминает в сессии 10 последних отзывов. * Отзыв выбирается из базы рандомно исключая отзывы из сессии. * * @return Review|null */ protected function __getReview() { $review_ids = Request::session()->get('review_ids'); $where = Review::withTrashed()->with('profile'); if (!is_null($review_ids)) { $where->whereNotIn('id', $review_ids); } $where->orderByRaw('RAND()'); $where->limit(1); $reviews = $where->get(); $review = null; if ($reviews) { $review = $reviews[0]; } if (is_null($review_ids)) { $review_ids = []; } if (sizeof($review_ids) >= 30) { $review_ids = array_slice($review_ids, 1); } if (sizeof($review_ids) < 30) { array_push($review_ids, $review->id); } Request::session()->set('review_ids', $review_ids); return $review; }