В компоненте Item.php
, достаточно при загрузке страницы делать обычный +1.
В функции onRun()
, там где мы выводим переменную $item
в страницу делаем так:
public function onRun()
{
$category = \OctoClub\Tutorial\Models\Category::where('slug', $this->property('slugCategory'))->first();
if (empty($category)){
return $this->controller->run('404');
}
$item = \OctoClub\Tutorial\Models\Item::where('category_id', $category->id)->where('slug', $this->property('slugItem'))->first();
if (empty($item)){
return $this->controller->run('404');
}
$item->hits = $item->hits + 1; // Добавляем один просмотр
$item->save(); // Сохраняем модель
$this->page['item'] = $item; // В страницу передается модель с добавленным просмотром.
}
Как видишь, ту модель, которую мы получили в запросе first()
, можно обрабатывать как угодно.
Если хочешь чтобы просмотры не накручивались обычным обновлением страницы, можно воспользоваться помощью сохранения данных в сессии:
\Session::get('var'); // Забираем переменную из сессии
\Session::put('var', $value); // Кладем переменную в сессию
Храни в сессии id посещенных страниц предметов, и проверяй их наличие перед добавлением просмотра.
В сессии так-же удобно хранить не просто переменную, а массив:
Session::put('var.element', $value) // в массив var кладем значение $value с ключом element.
Дальше уже твои фантазии и только лишь творческий процесс)