SELECT f.`id`, f.`file`
FROM `files` f
LEFT JOIN `offers_images` oi ON oi.`image` = f.`id`
LEFT JOIN `companies` cn ON cn.`image` = f.`id`
LEFT JOIN `posts` p ON p.`image` = f.`id`
LEFT JOIN `complex` cx ON cx.`image` = f.`id`
LEFT JOIN `complex_declarations` cd ON cd.`file` = f.`id`
LEFT JOIN `complex_gallery` cg ON cg.`file` = f.`id`
LEFT JOIN `complex_plans` cp1 ON cp1.`image` = f.`id`
LEFT JOIN `complex_plans` cp2 ON cp2.`original_image` = f.`id`
LEFT JOIN `banners` b1 ON b1.`project` = f.`id`
LEFT JOIN `banners` b2 ON b2.`embed` = f.`id`
LEFT JOIN `banners` b3 ON b3.`img` = f.`id`
WHERE
oi.`id` IS NULL AND
cn.`id` IS NULL AND
p.`id` IS NULL AND
cx.`id` IS NULL AND
cd.`id` IS NULL AND
cg.`id` IS NULL AND
cp1.`id` IS NULL AND
cp2.`id` IS NULL AND
b1.`id` IS NULL AND
b2.`id` IS NULL AND
b3.`id` IS NULL AND
(f.`loaded_at` IS NULL OR f.`loaded_at` <= :loaded)
Всё это делается по CRON'у, который запускает какой-то метод контроллера
Эх, а я хотел обойтись без CRON, похоже не судьба :)
/opt/php55/bin/php ~/www/site.ru/bin/console app:clear --not-used-files
тут я с Вами согласен, что они "светятся наружу", но админ-панель с большей вероятность наружу светится... это не повод делать вместо админ-панели управление сайтом через консоль.
Эту проблему решает банальное отсутствие вывода в браузер - проверка гет-параметра, если задан и задан правильно - выполняем действие N.
А если симфони-консоль полностью переносится на любой другой ФВ, я подозреваю, что в ней нет встроенных механизмов для работы с БД, а если так, то вместо готового контроллера настроенного именно под этот проект, с готовым конфигом и моделями/репозиторями и пр. механизмами для обслуживания БД - мы будем писать очередной велосипед, для обработки данных.
К тому же, как я уже писал выше - эта команда будет нужна и будет работать только в этом конкретно взятом проекте, это же не composer-модуль для управления картинками, а код написанный в рамках (и исключительно для) этого проекта, который эти картинки загружает. По этому, вопрос переносимости - мало актуален для этого индивидуального случая.
Суть сравнения в том, что админка точно так же светится как и любой другой публичный контроллер, но это не мешает ей быть защищенной от постороннего вмешательства в её работу.
И работа с БД "жестко отвязанная от контроллера" (как пример другой крайности) - по моему, ничуть не лучше, чем работа с БД жестко к контроллеру привязанная.
Так же как до сих пор не думаю, что есть какой-то смысл переносить консольную команду заточенную исключительно под 1 проект - в какой-то другой проект, где она работать не будет (в виду разности архитектур БД). Или Вы предлагаете вместо просто удаления конкретного набора файлов в соответствии с парой простых правил в рамках проекта - написать целый универсальный комбайн со сложными схемами работы, для универсальности удаления нескольких файлов?
От того, что готовая команда будет запускаться на другом проекте и делать в лучшем случае "ничего" (полезного), т.к. там абсолютно другая архитектура БД - толку примерно никакого, и слабая связанность компонентов осмысленности подобным решениям не добавляет.
Мы же тут конкретный проект обсуждали, и конкретный случай, вопрос о переносимости самой консоли вне рамок текущего проекта и конкретной задачи не стоял изначально.
А если симфони-консоль полностью переносится на любой другой ФВ, я подозреваю, что в ней нет встроенных механизмов для работы с БД, а если так, то вместо готового контроллера настроенного именно под этот проект, с готовым конфигом и моделями/репозиторями и пр. механизмами для обслуживания БД - мы будем писать очередной велосипед, для обработки данных.