НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
77 of 182 menu

Таблица file_usage

Таблица file_usage является ключевым компонентом системы управления файлами Drupal. Она служит для учета связей между файлами (хранящимися в таблице file_managed) и сущностями, которые их используют (ноды, пользователи, таксономия и т.д.).

Основная цель этой таблицы - предотвратить удаление файлов, которые все еще используются на сайте, и обеспечить корректное обновление счетчиков использования.

Поля

Поле Тип данных Описание
fid int Идентификатор файла. Внешний ключ, ссылается на file_managed.fid.
module varchar(255) Название модуля, который использует файл (например: node, user, editor).
type varchar(64) Тип сущности, которая использует файл (например: node, user, taxonomy_term).
id varchar(64) Идентификатор сущности, которая использует файл. Соответствует ID сущности в её основной таблице.
count int Количество использований файла данной сущностью. Увеличивается при добавлении файла и уменьшается при его удалении.

Как это работает

Когда модуль использует файл (например, при загрузке изображения в тело статьи), он вызывает функцию file_usage->add(). Эта функция добавляет или обновляет запись в таблице file_usage, увеличивая счетчик count.

При удалении сущности (например, ноды) или удалении файла из содержимого, модуль вызывает file_usage->delete(), что уменьшает счетчик. Когда счетчик для конкретного файла достигает нуля по всем модулям, файл считается неиспользуемым и может быть удален в процессе кронирования (если включена соответствующая настройка).

Система предотвращает удаление файлов, которые все еще имеют положительные значения счетчиков в этой таблице, что защищает от "битых" ссылок на изображения и другие медиафайлы.

Комбинация полей module, type и id однозначно идентифицирует "потребителя" файла, а поле fid идентифицирует сам "потребляемый" файл.

Пример SQL-запроса

Получить информацию об использовании файла с ID 42:

SELECT u.*, f.filename, f.uri FROM file_usage u JOIN file_managed f ON u.fid = f.fid WHERE u.fid = 42;

Найти все неиспользуемые файлы (кандидаты на удаление):

SELECT f.* FROM file_managed f LEFT JOIN file_usage u ON f.fid = u.fid WHERE u.fid IS NULL OR u.count = 0;

Смотрите также

  • таблицу file_managed,
    которая хранит основную информацию о файлах
  • таблицу node,
    которая хранит материалы сайта
  • таблицу users,
    которая хранит данные пользователей
  • таблицу taxonomy_term_data,
    которая хранит термины таксономии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить