我正在开发一个应用程序,您可以在其中使用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
    }

10-07 14:39
查看更多