Добавить вычисляемые столбцы в DataTable - PullRequest
0 голосов
/ 16 января 2019

Я использую 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, потому что я хотел бы фильтровать / упорядочивать их. Большое спасибо заранее.

...