我正在开发一个应用程序,使用Symfony和Doctrine管理存储在许多不同表中的各种数据。我为90%的用例实现了一个简单(足够复杂)的搜索表单,但问题是最后10%,这可能是一些非常困难,复杂和扭曲的查询。
我的想法是为高级用户实现一种方法来编写一些DQL(在Doctrine中使用的SQL拨号)查询,只运行int diff = listA.size() - listB.size();
if (diff > 0) {
listB.addAll(Collections.nCopies(diff, ""));
}
,并使其可供其他用户使用,这样可以避免对它们进行编码并推送它们,而不是让它们动态和可扩展。查询将存储在数据库中,用户可以有机会更改查询的某些参数,使其符合他的需求。
我知道这需要一些高级安全检查,但这个解决方案是否可以接受?
非常感谢!
答案 0 :(得分:1)
这已经是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
}