加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何将派生列添加到我的Yii模型中?

发布时间:2020-12-13 16:45:43 所属栏目:PHP教程 来源:网络整理
导读:在Yii中,我需要为我的模型中的任何结果集添加一个“派生”列.该列实际上不存在于数据库表中. 例如,假设我有一个Activity模型.活动只有两种:(1)收入,或(2)费用. 如果我想添加一个名为income_total或expense_total的列(取决于正在访问的活动类型),我该怎么做
在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,'id' => $activity->id)); ?>
      <?php echo $activity->amount; ?>
    </li>
  <?php endforeach; ?>
</ul>

我需要在Activity模型代码中做些什么才能实现这一点,或者我应该以不同的方式思考这个问题?

解决方法

我相信它与Ruby非常相似. PHP有魔术方法,在Yii中由CComponent实现(很多基类包括CActiveRecord).

简而言之,您可以在模型中执行此操作

class Activity extends CActiveRecord {
     public function getIncome_Total() {
       // ...
     }
   }

并且,从控制器访问它

$activity = Activity::model->findByPk(1);
$income_total = $activity->income_total;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读