我知道如何使用查询生成器设置字段的别名。
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()
,因此您可以使用完全相同的语法。