在Yii中,我需要爲我的模型的任何結果集添加一個「派生」列。該列實際上不存在於數據庫表中。如何將派生列添加到我的Yii模型?
例如,假設我有一個Activity
模型。只有兩種類型的活動:(1)收入,或(2)支出。
如果我想添加一個名爲income_total
或expense_total
列(取決於什麼類型的活動被訪問),我該怎麼做?
下面是Ruby on Rails的一個Activity
模型的工作示例(基本上,我不知道如何做同樣的事情,但在Yii中):
class Activity < ActiveRecord::Base
attr_accessible :name, :effective_at, :amount, :category
scope :incomes, :conditions => { :category => 'Income' }
scope :expenses, :conditions => { :category => 'Expense' }
def self.incomes_total
incomes.sum :amount
end
def self.expenses_total
expenses.sum :amount
end
end
更新2012-07-01:
answer provided by Leonardo指向使用Virtual Attributes,這會爲我從數據庫檢索的結果集的每個「行」添加一個屬性。
如果Activity
模型具有Parent
一個BELONGS_TO
關係,父視圖可能看起來像下面這樣:
<h2><?php echo $parent->name; ?></h2>
<ul>
<?php foreach($portfolio->activities as $activity): ?>
<li>
<?php echo CHtml::link($activity->name, array('activity/view', 'id' => $activity->id)); ?>
<?php echo $activity->amount; ?>
<?php echo $activity->incomes_total; ?>
</li>
<?php endforeach; ?>
</ul>
但是,它沒有任何意義了這個虛擬屬性要在foreach內訪問( )循環。
,我要爲整個結果集一個「聚合」的價值。這些虛擬屬性,所以我想它使用$parent->activities->incomes_total
能夠訪問,就像這樣:
<h2><?php echo $parent->name; ?></h2>
<?php echo $parent->activities->incomes_total; ?>
<ul>
<?php foreach($portfolio->activities as $activity): ?>
<li>
<?php echo CHtml::link($activity->name, array('activity/view', 'id' => $activity->id)); ?>
<?php echo $activity->amount; ?>
</li>
<?php endforeach; ?>
</ul>
什麼我需要做的內活動模型代碼來實現這一點,還是我應該考慮這個不同的方式?
我剛剛看到Yii有一個實施[命名範圍](http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes)也是如此。所以我正在閱讀。它可能指向我正確的方向。 – Turgs