有没有办法在列表视图中显示收集总数?想象一下,有一个用户可以有很多链接。如何在列表视图中显示总链接数?
答案 0 :(得分:2)
我的答案类似于Khalid(上图),但有一些关键的区别。
如果您将集合包装在count( $entity->getLinks() )
中,那么这将发出一个返回每个链接关联的查询。
这样做的缺点是,如果您有1000个链接关联,则所需的内存资源需要足以为每个实体提供水合。 (如果你有数千个不同的实体,这可能是巨大的)。
相反,您应该将您的实体标记为EXTRA_LAZY,然后使用 - -
$ entity-> getLinks() - > count()`方法,它不会进行任何保湿,而只会发出COUNT个查询。
请执行以下操作:
/**
* @ManyToMany(targetEntity="Links", mappedBy="whatever", fetch="EXTRA_LAZY")
*/
public $links;
然后你可以打电话:
public function getTotalLinks(){
return $this->getLinks()->count();
}
它会非常快。
答案 1 :(得分:2)
显示字段非常简单,有按此虚拟字段排序的解决方案。
实体/ Some.php 有关此处的详情Extra Lazy Associations
public function getCommentsCount()
{
return $this->getComments()->count();
}
SomeAdmin.php 覆盖 createQuery 并配置列表字段
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
if ('list' === $context) {
$rootAlias = $query->getRootAliases()[0];
//...
$parameters = $this->getFilterParameters();
if ('getCommentsCount' === $parameters['_sort_by']) {
$query
->leftJoin($rootAlias.'. comments', 'cm')
->groupBy($rootAlias.'.id')
->orderBy('COUNT(cm.id)', $parameters['_sort_order'])
;
}
//...
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('id')
//...
->add(
'getCommentsCount',
null,
[
'sortable' => true,
'sort_field_mapping' => ['fieldName' => 'id'],
'sort_parent_association_mappings' => [],
]
)
//....
}
service.yaml 添加"简单" paginator(计数无法正常工作)
tags:
- { name: sonata.admin, pager_type: "simple", ...
原因:
\奏\ DoctrineORMAdminBundle \数据网格\ ProxyQuery :: getFixedQueryBuilder (//对于SELECT DISTINCT,ORDER BY表达式必须出现在idxSelect中 列表)
答案 2 :(得分:0)
是的,您可以显示每个用户的链接总数,我假设您在用户实体中定义了链接的数组,定义了一个名为$totalLinks
的属性,并在该属性的getter中返回链接的数量如下所示
class User{
public $totalLinks;
public function getTotalLinks(){
return count($this->getLinks());
}
}
然后在configureListFields()
您可以添加$totalLinks
属性
protected function configureListFields(ListMapper $list)
{
$list
->add('...')
->add('...')
->add('totalLinks');
}
答案 3 :(得分:0)
在这里找到答案:
Removing the Edit Chart link from an R plotly graph
我正在使用Sonata 2.3,因此TWIG模板应该像:
Sub copyBetweenWorkbooks()
Dim wkbkA As Workbook
Dim wkbkB As Workbook
Dim copyValues As Range
Dim directory As String, fileName As String, i As Long, j As Long
Application.ScreenUpdating = False
directory = "c:\test\"
fileName = Dir(directory & "yourspreadsheet.xls")
Set wkbkA = ThisWorkbook
Set copyValues = wkbkA.Sheets({ put sheet here}).Range({put range here})
Set wkbkB = Workbooks.Open(directory & fileName)
With wkbkB
'do your stuff here
End With
'close your stuff if you need to
Workbooks(fileName).Close
Application.ScreenUpdating = True
End Sub
答案 4 :(得分:0)
使用Sonata 3。**
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
//...
->addIdentifier('getCommentsCount', IntegerType::class, [ 'label' => '#Comments'])
;
}
其中Post.php:
public function getCommentsCount()
{
return $this->comments->count();
}
对我有用的