atk4 / data

Data Access PHP Framework for SQL & high-latency databases
https://atk4-data.readthedocs.io
MIT License
273 stars 46 forks source link

AggregateModel inheriting reference on setGroupBy fields #985

Open mkrecek234 opened 2 years ago

mkrecek234 commented 2 years ago

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.

mvorisek commented 2 years ago

discussion:

image

mvorisek commented 2 years ago

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

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