我正在开发一个应用程序,使用Symfony和Doctrine管理存储在许多不同表中的各种数据。我为90%的用例实现了一个简单(足够复杂)的搜索表单,但问题是最后10%,这可能是一些非常困难,复杂和扭曲的查询。
我的想法是为高级用户实现一种方法来编写一些DQL(在Doctrine中使用的SQL dialiect)查询来运行,只有SELECT
,并让它们可供其他用户使用,这样可以避免编写它们并推送它们但是而是让它们充满活力和可扩展性。查询将存储在数据库中,并且用户可以有机会更改查询的某些参数以使其符合他的需要。
我知道这需要一些高级安全检查,但这个解决方案是否可接受?
非常感谢!
这已经是symfony控制台的一部分,它允许您运行DQL查询。
有关更完整的解决方案,请检查:vendor / doctrine / orm / lib / Doctrine / ORM / Tools / Console / Command / 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
}