php EasyAdmin,我如何添加自定义列到网格?

mgdq6dx1  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(136)

我想添加一个不在我的实体中的列,需要一些自定义查询/子查询。例如,我有一个实体与用户分配给它,我想一列,将显示用户计数,但只有活跃的用户,或只有用户创建后,一些日期。我试图添加一个字段到查询生成器,但然后我得到了一个与“id作为数组”相关的错误。使用Easyadmin可以做到这一点吗?
对于测试,我试图添加任何字段查询生成器

public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
{
[...]
    $queryBuilder->addSelect('1 AS userCount');
    return $queryBuilder;
}

字符串
但是我得到了错误Cannot read property "id" from an array. Maybe you intended to write the property path as "[id]" instead.,我从AbstractCrudController::index中转储了paginator,看到结果现在几乎没有不同的结构

-results: ArrayIterator {#900 ▼
    -storage: array:10 [▼
      0 => array:2 [▼
        0 => App\Entity\Company {#916 ▶}
        "userCount" => 1
      ]
      1 => array:2 [▼
        0 => App\Entity\Company {#814 ▶}
        "userCount" => 1
      ]


通常你只有实体的数组,而不是有实体和自定义值的数组的数组。

vnzz0bqm

vnzz0bqm1#

我找到了解决这个问题的办法。它并不完美,因为您需要查询数据库的每一行。而且,感觉有点黑客。
您可以添加模型中不存在的列,这很好。方法setValue不能接受callable,但foramtValue可以,因此类似这样的方法工作得很好

yield TextField::new('userCount')
            ->setValue('0')
            ->formatValue(function ($value, $entity) {
                return $this->userRepository->count(['company' => $entity->getId()]);
            })
            ->onlyOnIndex();

字符串
您需要将该值设置为formatValue的默认值才能工作。

相关问题