Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?

Posted

技术标签:

【中文标题】Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?【英文标题】:Symfony2 Form > Entity Field Type > query builder > subselect possible? 【发布时间】:2013-04-11 09:48:31 【问题描述】:

我有一个实体字段类型的表单。 在此实体字段类型中,我有一个查询生成器,因为我只想选择一些记录。 但是我想在这个查询生成器中做一个子选择,我不确定这是不是正确的方法:

'query_builder' => function(EntityRepositorty $er) 
    $subq = $er->createQueryBuilder()        
    //cannot select other entity here?

    return $er->createQueryBuilder('a')
    ->leftJoin($subq)
    ->where('blah blah')

有没有人遇到过这个问题,他们的解决方案是什么?

左连接看起来类似于:

LEFT JOIN (select * from `table_c` order by date desc) as c on c.status_id = a.id

【问题讨论】:

您真的需要添加子查询吗?你们两个实体之间的关系如何? 你为什么不用实体之间的正常关系来做这个? 我需要从 table_c 获取最新的值。进一步解释? 【参考方案1】:

您的描述表明表 c 作为一对多关系映射到表 a 上。您应该只使用正常的学说连接:

'query_builder' => function(EntityRepository $er) 
    return $er->createQueryBuilder('c')
    ->join('c.a', 'a');

您需要使用普通连接,因为左连接将为您提供表 c 中的所有内容,无论它是否与 a 相关。

【讨论】:

以上是关于Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - 向现有实体添加新字段

Symfony2 - 如何阻止 Form->handleRequest 清空帖子数据中不存在的字段

Symfony2 实体字段类型替代“property”或“__toString()”?

Symfony2 和 Selectize.js:在实体字段类型中保留新项目的最清晰方法?

Symfony2 表单和 <input> 模式属性

Symfony2 实体中除 id 以外的字段的关联在表单中未正确显示