我有两张表:Campaigns和Campaign_statistics。我需要输出嵌套统计信息的广告系列列表。
首先,我在模型中创建了一个方法,生成如下数组:
array(
'id', // integer
'campaign_name',// string
'stats'// nested array of arrays with stats by periods
);
在一个视图中,我有两个foreach循环(一个嵌套在另一个内部):
<? foreach ($this->campaigns as $campaign): ?>
<div class="campaign">
<?= $campaign['name'] ?>
<? foreach($campaign['stats'] as $monthStats): ?>
<div class="statistics">
<?= $monthStats['views'] ?>
</div>
<? endforeach ?>
</div>
<? endforeach ?>
那种模型实现方式会导致混乱的代码,因此我决定尝试将Campaign转化为对象。在视图中,我使用getter:
<? foreach($this->campaigns as $campaign): ?>
<div class="campaign">
<?= $campaign->getName() ?>
<? foreach($campaign->getMonthStats() as $monthStats): ?>
<div class="statistics">
<?= $monthStats->getViews() ?>
</div>
<? endforeach ?>
</div>
<? endforeach ?>
我从未见过任何框架像这样使用getter。这种方法有什么优缺点?