Я разрабатываю приложение, в котором вы управляете большим разнообразием данных, хранящихся во многих разных таблицах, используя Symfony и Doctrine. Я выполнил простую (сложную) форму поиска для 90% случаев, но проблема - последние 10%, которые могут быть очень сложными, сложными и искаженными запросами.
Моя мысль заключалась в том, чтобы предоставить продвинутым пользователям возможность написать некоторые запросы DQL (SQL dialiect, используемые в Doctrine) для запуска, только для SELECT
, и сделать их доступными для остальных пользователей, что позволит избежать необходимости их кодировать и нажимать, но скорее сделайте их динамичными и расширяемыми. Запросы будут храниться в базе данных, и пользователю может быть предоставлена возможность изменить некоторые параметры запроса, чтобы он соответствовал его потребностям.
Я знаю, что для этого нужны некоторые расширенные проверки безопасности, но приемлемо ли это решение?
Большое спасибо!
Это уже часть консоли symfony, которая позволяет запускать DQL-запросы.
Для более полного решения проверьте: vendor/doctrine/orm/lib/Doctrine/ORM/Инструменты/Консоль/Команда /RunDqlCommand.php
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
/* @var $em \Doctrine\ORM\EntityManagerInterface */
$em = $this->getHelper('em')->getEntityManager();
[...]
$query = $em->createQuery($dql);
[...]
$resultSet = $query->execute([...]);
// Show the results
}