updateCount
библиотеки: database
.Допустим, нам необходимо пересчитать количество комментариев у фотографии. Делаем так:
$this->database()->updateCount(
'comment',
'parent_id = 0 AND type_id = \'photo\' AND item_id = ' . (int) $photo['photo_id'],
'total_comment',
'photo',
'photo_id = ' . (int) $photo['photo_id']
);
Функция имеет пять параметров:
- Название таблицы, в которой будет пересчитывать записи.
- Строка запроса: По каким параметрам считать записи.
- Поле: Счётчик, который необходимо обновить.
- Название таблицы, где будет обновлён счётчик.
- Строка запроса: Счётчик какой записи обновлять.
Тут будет пересчёт всех существующих записей, с указанными параметрами выборки, после чего обновится указанное поле.
В phpFox есть ещё один вариант обновления счётчика, который просто добавляет единицу, либо отнимает единицу, от количества записей. Допустим, задача та же, обновления счётчика комментов у фотографии. Делаем так:
$this->database()->updateCounter(
'photo',
'total_comment',
'photo_id',
$photo['photo_id']
);
Тут функция
updateCounter
принимает четыре параметра:
- Название таблицы, в котором находится поле для обновления.
- Название поля, что будем обновлять.
- По какому полю находим нужную запись.
- Что должно соответствовать полю.
В данном случае, значение:
total_comment
станет на единицу больше. Чтобы значение стало на единицу меньше, необходимо вставить пятый параметр (true
) в функцию:
$this->database()->updateCounter(
'photo',
'total_comment',
'photo_id',
$photo['photo_id'],
true
);
Когда использовать тот или иной способ обновления счётчика?: Например, при добавлении одного комментария, или лайка, я бы использовал вариант с добавлением единицы, так и с удалением коммента и дизлайком, отнимал бы единицу (
updateCounter
). А когда надо обновить счётчик, скажем, после каких либо ошибок на сайте, что могло привести к неправильной статистике, тогда в ход пускать уже полный пересчёт и обновление (updateCount
).Кстати, в движке, во многих местах, где логичнее, на мой взгляд, было бы использовать метод
updateCounter
, используется updateCount
.