Я использую Symfony4, Doctrine2 и DataTables. Я хотел бы отобразить таблицу с данными из моих сущностей по моему QueryBuilderProcessorInterface , но у меня проблема с вычисляемыми столбцами .
Определение моей таблицы данных:
$table = $dataTableFactory->create()
->add('date', DateTimeColumn::class)
->add('event', TextColumn::class)
->add('eventType', TextColumn::class, ['field' => 'et.name'])
->add('beverage', TextColumn::class, ['field' => 'b.name'])
->add('beverageType', TextColumn::class, ['field' => 'bt.name'])
->add('alcohol', TextColumn::class, ['field' => 'b.alcoholVolume'])
->add('glassVolume', TextColumn::class, ['field' => 'v.volume'])
->add('numberOfGlasses', TextColumn::class)
->add('totalVolume', TextColumn::class)
->add('alcoholVolume', TextColumn::class)
->createAdapter(ORMAdapter::class, [
'entity' => DiaryItem::class,
'query' => [$diaryItemRepository]]
)
->handleRequest($request);
Два последних столбца totalVolume и coholVolume не являются частью сущностей, они вычисляются. Мой QueryBuilder выглядит как
/**
* @param QueryBuilder $qb
* @param DataTableState $state
* @return void
*/
public function process(QueryBuilder $qb, DataTableState $state)
{
$qb
->select(
'i',
'i.numberOfGlasses * v.volume AS totalVolume',
'i.numberOfGlasses * v.volume * b.alcoholVolume / 100 AS alcoholVolume'
)
->from(DiaryItem::class, 'i')
->join('i.eventType', 'et')
->join('i.beverage', 'b')
->join('b.type', 'bt')
->join('i.glassVolume', 'v');
}
Однако, если я заполню DataTable на QueryBuilder выше, то получу ошибку
Cannot read property "diaryItemId" from an array. Maybe you intended to write the property path as "[diaryItemId]" instead.
Я думаю, что проблема в том, что если я добавил два вычисляемых столбца, то основной объект DiaryItem был бы перемещен в индекс 0 в результате QueryBuilder, см.
AbstractAdapter.php on line 53:
array:3 [
0 => DiaryItem {#677
-diaryItemId: 1
-date: DateTime @1546815600 {#566
date: 2019-01-07 00:00:00.0 Europe/Berlin (+01:00)
}
-event: "Kurty"
-eventType: EventType {#710
+__isInitialized__: false
-eventTypeId: 7
-name: null
…2
}
-beverage: Beverage {#720
+__isInitialized__: false
-beverageId: 1
-name: null
-alcoholVolume: null
-type: null
…2
}
-numberOfGlasses: 3
-glassVolume: Volume {#725
+__isInitialized__: false
-volumeId: 30
-volume: null
…2
}
}
"totalVolume" => "1500"
"alcoholVolume" => "61.500000"
]
Есть ли решение для добавления двух вычисляемых столбцов? Я не хочу добавлять их в сущность DiaryItem, потому что я хотел бы фильтровать / упорядочивать их. Большое спасибо заранее.