data icon indicating copy to clipboard operation
data copied to clipboard

AggregateModel inheriting reference on setGroupBy fields

Open mkrecek234 opened this issue 2 years ago • 2 comments

If you create an aggregate Model an group by certain fields which are hasOne references in the source model, it would be convenient to also have/keep those references in the aggregate Model, so if source model has a hasOne reference called 'tax_rule_id':

 $aggregateModel =  new \Atk4\Data\Model\AggregateModel($sourcemodel);
        
$aggregateModel->setGroupBy(['tax_rule_id', 'tax_rate'], [
    'total_gross'                 => ['expr' => 'sum([total_gross])'],
    'total_net'                   => ['expr' => 'sum([total_net])'],
    'total_tax'                   => ['expr' => 'sum([total_tax])'],
]);

foreach ($aggregateModel as $taxposition) {
  $result = $taxposition->ref('tax_rule_id')->get('revenue_account_id');
}

the aggregateModel should then allow $tax_rule_name = $taxposition->ref('tax_rule_id')->getTitle(); for example.

mkrecek234 avatar Apr 21 '22 10:04 mkrecek234

discussion:

image

mvorisek avatar Apr 21 '22 11:04 mvorisek

I think no field (nor reference, user action, ...) should be added automatically, because if anything is added automatically:

  • it will select extra data (worsen performance)
  • phpdoc (for hintable) must be always declared manually

However, when such field ())ref, ...) is added to the outer model, the configured properties (class, type, ...) must be inherited as defaults.

mvorisek avatar Apr 23 '22 11:04 mvorisek