yii2使用activerecord规则将连接字符串插入数据库

时间:2016-03-09 09:32:12

标签: activerecord insert yii2 concatenation scenarios

我有一个表单,用户选择一些选项,我想根据用户输入在DB中插入一个额外的连接字段。我需要在SCENARIO_CREATE(和更新)上执行此操作。例如:

type: A
size: 100
color: black

concatenated: A100black

我已经这样试过了:

型号:

class Xyz extends BaseXyz {

    const SCENARIO_CREATE = 'create';

    public function rules() {
        ...
        ['concatenated', 'generateConcatenated', 'on' => self::SCENARIO_CREATE],

    ...

    public function generateConcatenated() {
        return $this->type . $this->size . $this->color;
    }

控制器:

class XyzController extends base\XyzController {

    public function actionCreate() {
        $model = new Xyz;
        $model->scenario = Xyz::SCENARIO_CREATE;
        ...

我已经在规则中尝试'filter',但没有成功。也许我的方法是完全错误的,它不能在规则中完成?请指出我正确的方向。非常感谢!

1 个答案:

答案 0 :(得分:0)

规则用于检查属性验证,但您也可以在规则中执行:

public function generateConcatenated($attribute,$param) {
    $this->concatenated = $this->type . $this->size . $this->color;
}

我认为实现此目标的最佳后勤方法是从rules移除属性并覆盖模型中的beforeSave()

public function beforeSave($insert)
{
    $this->concatenated = $this->type . $this->size . $this->color;
    return parent::beforeSave($insert);
}

您应该考虑yii对于新记录具有默认insert方案,对于现有记录具有update