/** * In the event $modelToReportAdapter is summable and is a calculated group by modifier, unlike * DisplayAttributeReportItemQueryBuilder->makeModelAttributeToDataProviderAdapter, we do not need to * resolve the relatedAttribute when creating the RedBeanModelAttributeToDataProviderAdapter since currently * the attributes can only be date or dateTime. * @param $modelToReportAdapter * @param string $attribute * @return DerivedRelationViaCastedUpRedBeanModelAttributeToDataProviderAdapter | * ReadOptimizationDerivedAttributeToDataProviderAdapter | RedBeanModelAttributeToDataProviderAdapter */ protected function makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute) { assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter'); assert('is_string($attribute)'); if ($modelToReportAdapter->isAttributeReadOptimization($attribute)) { return new ReadOptimizationDerivedAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), null); } if ($modelToReportAdapter instanceof ModelRelationsAndAttributesToSummableReportAdapter && $modelToReportAdapter->isAttributeACalculatedGroupByModifier($attribute)) { return new RedBeanModelAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), $modelToReportAdapter->resolveRealAttributeName($attribute)); } return parent::makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute); }
/** * @param $modelToReportAdapter * @param string $attribute * @return DerivedRelationViaCastedUpRedBeanModelAttributeToDataProviderAdapter|RedBeanModelAttributeToDataProviderAdapter */ protected function makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute) { assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter'); assert('is_string($attribute)'); if ($modelToReportAdapter instanceof ModelRelationsAndAttributesToSummableReportAdapter && $modelToReportAdapter->isAttributeACalculationOrModifier($attribute)) { $relatedAttribute = static::resolveRelatedAttributeForMakingAdapter($modelToReportAdapter, $attribute); $adapterClassName = get_class($modelToReportAdapter); return new RedBeanModelAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), $adapterClassName::resolveRealAttributeName($attribute), $relatedAttribute); } return parent::makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute); }