如何使用分页并为 Cake 3.x 中的字段显示不同的别名



我知道如何使用查询生成器设置字段的别名。

http://book.cakephp.org/3.0/en/orm/query-builder.html#selecting-data

我知道还有另一种使用虚拟字段的方法

http://book.cakephp.org/3.0/en/orm/entities.html#creating-virtual-fields

我不想使用虚拟字段。

我想在控制器级别动态为分页查询的字段设置别名。类似于我在使用查询构建器时设置别名的方式。

我该如何做到这一点?

更新

我实际上在 Crud 插件中使用它。

所以代码目前看起来像这样

 $this->Crud->on('beforePaginate', function(Event $event) use ($conditions) {
        $this->paginate['conditions'] = $conditions;
        $this->paginate['limit'] = 100;
        $this->paginate['fields'] = [
            'Events.id', 'Events.title', 'Events.start_date', 
            'Events.end_date', 'Events.revenue', 'Events.total_costs', 'Events.collections'
        ];
    });
    return $this->Crud->execute();

我也尝试过什么

$this->Crud->on('beforePaginate', function(Event $event) use ($conditions) {
        $this->paginate['conditions'] = $conditions;
        $this->paginate['limit'] = 100;
        $query = $this->Events->find()->select([
            'start' => 'start_date',
            'end' => 'end_date',
            'id', 'title', 'revenue', 'total_costs', 'collections'
        ]);
        $this->paginate($query);
    });

尝试这个后我得到了什么

就好像选择根本不起作用一样。我拿回了所有的田地Events

我该如何做到这一点?

通过在fields选项中使用key => value语法,例如

$this->paginate = [
    'fields' => [
        'non_aliased_field',
        'alias' => 'field',
        // ...
    ]
];

fields选项值将传递给Query::select(),因此您可以使用完全相同的语法。

最新更新