Symfony 5搜索DateTimeColumn数据表

2mbi3lxu  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在使用Omines Symfony数据表包https://omines.github.io/datatables-bundle/#doctrine-orm来组织我的事件表。
我无法搜索我的“Début”和“Fin”列,它们是日期时间列类型。我猜是因为这些是日期时间对象,我猜它找不到匹配。
mytable
如果我键入“08/19/2020”,它不会为我找到任何结果。
这里:https://datatables.net/forums/discussion/44218/how-do-i-search-on-a-datetime-column它建议在服务器端格式化日期,所以我尝试了(当然我已经安装了能够使用date_format的doctrine扩展):

->createAdapter(ORMAdapter::class, [
    'entity' => Event::class,
    'query' => function (QueryBuilder $builder) use ($eventStatus) {
        $builder
            ->select('e')    
            ->addSelect('DATE_FORMAT(e.startDate, "%d/%m/%Y")')
            ->addSelect('ca')
            ->addSelect('ci')
            ->addSelect('u')  
            ->from(Event::class, 'e')
            ->join('e.category', 'ca')
            ->join('e.city', 'ci')
            ->join('e.user', 'u')
            ->andWhere('e.status = :status')
            ->setParameter('status', $eventStatus)
            ->orderBy('e.id', 'DESC')
        ;
    },
])

I also changed my dateStart column to TextColumn:

->add('startDate', TextColumn::class, ['label' => 'Début', 'field' => 'e.startDate', 'render' => function($value, $context) {
    return sprintf(
        '%s<br>
        %s',
        $value,
        $context->getStartAt()->format('H\hi'),
    );
}])

我有这个错误:
未捕获的PHP异常原则\ ORM \查询\ QueryException:“[语法错误]第0行第34列:错误:应为StateFieldPath表达式|弦|输入参数|函数返回字符串|聚合表达式,已获得“""“
我看不出问题出在哪里。
谢谢你的帮助。

c3frrgcw

c3frrgcw1#

从您提出的问题中很难判断,但是在您的代码中有些东西看起来有问题。
首先,使用一个自定义查询,但不使用任何带有日期的WHERE子句。
第二,列的格式没有命名。由于结果没有名称,因此无法访问。您可以使用关键字AS命名它:

->addSelect('DATE_FORMAT(e.startDate, "%d/%m/%Y") AS startDateFormatted')

第三,使用连接时,不应使用ORMAdapter,而应使用FetchJoinORMAdapter(这将帮助您解决使用连接时的分页问题)。
在我看来,您不应该尝试在查询中格式化startDate,而应该查看文档并使用Criteria
https://omines.github.io/datatables-bundle/#doctrine-orm

相关问题