如何在不同情况下实现Model的rules()方法?

时间:2019-08-26 10:30:51

标签: php yii2

我正在用Yii2开发某种金融计算器。

我有一个ActiveRecord模型操作,其中包括几个字段:

  • id
  • source_id-用户的信用卡ID,
  • category_id-用户的操作类别(例如“产品”,“气体”等),
  • 名称-操作名称(例如,“昨天的购物”等),
  • 总和-金额。

因此,用户创建操作,填写这些字段并保存。很好。

但是现在我想创建一种新型的操作-不仅是使用信用卡进行费用操作,而且还要在用户的信用卡之间进行资金转移(从一个source_id到另一个source_id)。

在我的Operation模型中,我为此功能创建了场景:

const SCENARIO_TRANSFER = 'transfer';

public function scenarios()
{
    $scenarios = parent::scenarios();
    $scenarios[self::SCENARIO_TRANSFER] = ['user_id', 'source_id', 'source_id2', 'sum', 'name'];
    return $scenarios;
}

此方案不使用category_id。它改为使用source_id2-用于属性比较的新属性。

因此,我向模型添加了一个新属性(当然,它在我的数据库表中不存在):

public $source_id2;

现在,我对如何为这种情况创建正确的验证规则感到困惑。 我需要: -source_id2-在新方案中是必需的, -source_id2-必须不同于source_id,

我已经添加:

public function rules(){
     ['source_id2', 'required', 'on' => self::SCENARIO_TRANSFER],
     ['source_id2', 'compare', 'compareAttribute' => 'source_id', 'operator' => '!=', 'on' => self::SCENARIO_TRANSFER],    
}

对吗?

在View中,我需要创建一个包含“ source_id”和“ source_id2”字段(下拉列表)的表单。但是我的模型中只有'source_id'。如何创建此表单并为其创建正确的价目表?

谢谢。

0 个答案:

没有答案