这是我在SymfonyCMF上的第一个简单项目。 在我的项目中,我有很多“个人资料”文件(就phpcr而言)。每个配置文件都属于特定的“部门”(父文档)。 (在phpcr中,每个文档都必须有父文档。) 在管理面板(SonataAdmin)中,我可以使用configureListFields函数列出所有“配置文件”。我可以使用configureDatagridFilters函数通过'profile'属性过滤它们。 但是,无法弄清楚如何通过其父级“部门”文档过滤“个人资料”。
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('name','doctrine_phpcr_string')
->add('title', 'doctrine_phpcr_string')
->add('parent') <--- Need to filter by parent !
;
}
尝试从SonataAdmin documentation实现自定义回调过滤功能:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('parent', 'doctrine_phpcr_callback', array(
'callback' => function($queryBuilder, $alias, $field, $data) {
if (!$data || !is_array($data) || !array_key_exists('value', $data)) {
return;
}
$queryBuilder = $proxyQuery->getQueryBuilder();
$eb = $queryBuilder->expr();
$queryBuilder->andWhere($eb->eq($field, $data['value']));
return true;
},
'field_type' => 'checkbox'
))
;
}
但是,首先我收到了与$ proxyQuery,$ queryBuilder-&gt; expr()相关的错误。其次我不知道如何正确查询和过滤父((。 提前完成。
解决了比@BilelNoômene的问题 最后的答案是
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('parent', 'doctrine_phpcr_callback', array('callback' =>
function ($proxyQuery, $alias, $field, $data) {
if (!$data || !is_array($data) || !array_key_exists('value', $data) || !$data['value']) {
return;
}
$queryBuilder = $proxyQuery->getQueryBuilder();
$queryBuilder->from($alias)
->joinInner()
->left()->document(Profile::class, $alias)->end()
->right()->document(Department::class, 'd')->end()
->condition()->child($alias, 'd')->end();
$queryBuilder->andWhere()->same($data['value']->getId(), 'd')->end();
return true;
}
), DocumentType::class, array('class'=>Department::class));
parent::configureDatagridFilters($datagridMapper);
}
答案 0 :(得分:0)
文档示例似乎无法正常工作。对于您的情况,请尝试此代码。
return array.indexOf(array[value - array[lo] <= array[hi] - value ? lo : hi])