我正在开发一个应用程序,您可以在其中使用Symfony和Doctrine管理存储在许多不同表中的各种数据。我为90%的用例实现了一个简单(足够复杂)的搜索表单,但问题是最后10%的情况,这可能是一些非常困难,复杂和扭曲的查询。
我的想法是为高级用户提供一种方法,使其仅运行SELECT
即可运行某些DQL(在Doctrine中使用的SQL方言)查询,并使它们对其他用户可用,从而避免了对它们进行编码和推送的麻烦它们,而是使它们动态且可扩展。查询将存储在数据库中,并且可以使用户有机会更改查询的某些参数以使其适合他的需求。
我知道这需要进行一些高级安全检查,但是此解决方案可以接受吗?
非常感谢!
最佳答案
这已经是symfony控制台的一部分,它允许您运行DQL查询。
获取实体经理
$ query = $ em-> createQuery($ dql)
$ resultset = $ query-> execute($ parameters);
渲染$ resultset
有关更完整的解决方案,请检查: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
}