Php 选择中的关联计数
我有一个Php 选择中的关联计数,php,search,doctrine-orm,zend-framework2,Php,Search,Doctrine Orm,Zend Framework2,我有一个候选人条令实体,这个实体与一个实体组 在索引页上,我显示了所有候选人 现在,我为组实体制作了一个带有ObjectMultiCheckbox对象的表单 选中复选框并提交表单后,我使用doctrineQueryBuilder仅显示与所选实体关联的候选实体 这很好,但在形式上,我想显示有多少候选人与某个群体相关。 我可以使用字段集中ObjectMultiSelectCheckbox定义中的label\u generator选项执行此操作: namespace MeCandidate\Form;
候选人
条令实体,这个实体与一个实体组
在索引页上,我显示了所有候选人
现在,我为组
实体制作了一个带有ObjectMultiCheckbox
对象的表单
选中复选框并提交表单后,我使用doctrineQueryBuilder
仅显示与所选实体关联的候选实体
这很好,但在形式上,我想显示有多少候选人与某个群体相关。
我可以使用字段集中ObjectMultiSelectCheckbox
定义中的label\u generator
选项执行此操作:
namespace MeCandidate\Form;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class SearchFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct($objectManager)
{
parent::__construct($name = 'search');
$this->add(
array(
'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
'name' => 'function',
'attributes' => array(
'class' => 'searchCriteria'
),
'options' => array(
'label' => 'Group',
'object_manager' => $objectManager,
'target_class' => 'MeCandidate\Entity\Group',
'label_generator' => function($targetEntity) {
return ' ' . $targetEntity->getName() . '('. $targetEntity->getCandidates()->count() .')';
},
),
)
);
}
public function getInputFilterSpecification()
{
return array(
array(
'name' => 'group',
'required' => false,
),
);
}
}
这一切都按预期进行。
因此,当我选择组X时,它会显示与组X关联的所有候选对象
但现在只显示了所有候选人的选择,与某个组关联的候选人数量不再准确,因为这显示了与该组关联的候选人总数,但我需要当前选择中与该组关联的候选人数量
我想我可以通过在创建表单时将当前的QueryBuilder注入表单来修复它。然而,我找不到一个好方法来获得正确的计数
我希望我想做的是清楚的,如果不问我什么的话
更新:
我有一个有效的解决方案,在我的组
实体中,我有一个方法getCandidateCount
它对当前选择的候选对象进行数组收集,并检查是否有关联的候选对象在选择中。我调整了字段集中的label\u generator
函数以调用getCandidateCount
问题是,在验证表单后,我必须重新创建表单,并将当前选择的候选项注入表单中,以便将其传递给label\u generator
函数中的getCandidateCount
方法
它工作,但不是很优雅,所以如果有人有如何更好的想法,我会喜欢听他们
谢谢,
约拉姆不确定是否理解“当前选择”?如果您只是按组筛选,则每个组中关联的候选对象的数量不会更改?如果我选择组X,则您是对的。组X的关联候选对象仍然相同。但与组Y关联的候选对象不再正确,因为并非所有候选对象都属于组X和Y。