![](/img/trans.png)
[英]Symfony 5.4 - EntityType multiple form field not selecting options in data
[英]Symfony 3 - Native query to fetch options for EntityType in form
我有一种形式,其中有一个连接到实体的字段:
->add('category', EntityType::class, array(
'class' => ProductCategory::class,
'required' => true,
'query_builder' => function(ProductCategoryRepository $repo) {
return $repo->createCategoryStructuredQuery();
}
))
但是在仓库中,我必须使用以下查询:
SELECT c.* FROM product_category c order by coalesce(c.parentid, c.id), c.parentid is not null, c.name
原则由于合并而抛出异常,并且在order子句中不为null,我在createCategoryStructuredQuery()中创建了一个本机查询:
public function createCategoryStructuredQuery() {
$rsm = new ResultSetMapping();
$rsm->addEntityResult('ProductBundle\Entity\ProductCategory', 'c');
$nativeQuery = $this->getEntityManager()
->createNativeQuery(
'SELECT c.*
FROM product_category c
order by coalesce(c.parentid, c.id),
c.parentid is not null,
c.name',
$rsm
);
}
如何返回QueryBuilder实例以将其正确分配给表单字段? 或者如何使用查询生成器正确构建上述的学说查询?
您可以直接在查询构建器中使用COALESCE
。 实际上,您可以将其添加到SELECT
语句中,然后将其用于排序。 您需要将该字段声明为HIDDEN
,以便将其从最终结果中排除。
->add('category', EntityType::class, array(
'class' => ProductCategory::class,
'required' => true,
'query_builder' => function(ProductCategoryRepository $repo) {
return $repo->createQueryBuilder('pc')
->select('pc, COALESCE(pc.parentid, pc.id) as HIDDEN orderId, -pc.parentId AS HIDDEN inverseParentId')
->orderBy('orderId', 'ASC')
->addOrderBy('inverseParentId', 'DESC')
->addOrderBy('pc.name', 'ASC')
->getQuery()->getResult();
}
));
正如我所看到的代码,Doctrine的例外仅仅是开始。 您的函数虽然没有返回任何值。 其次,您必须对创建的$ nativeQuery变量执行getResult()方法。 第三,即使您返回了getResult()方法的结果,它仍然不是一个queryBuilder对象(如窗体中的回调所示),而是一个数组。
为什么不只留在回调函数中并返回:
return $repo->createQueryBuilder('c')
// here build your query with qb functions, e.g. ->orderBy(arg1 [, arg2])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.