Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2:不保存非场景字段_Yii2 - Fatal编程技术网

Yii2:不保存非场景字段

Yii2:不保存非场景字段,yii2,Yii2,我使用不同的场景进行验证 场景中不需要字段电子邮件,但如果我传递电子邮件,则不会将其保存在DB中 模型中的规则: [['firstname','email'], 'string', 'max' => 256], 情景功能 public function scenarios() { $scenarios = parent::scenarios(); $scenarios['insert2'] = ['firstname', 'status'];

我使用不同的场景进行验证

场景中不需要字段电子邮件,但如果我传递电子邮件,则不会将其保存在DB中

模型中的规则:

 [['firstname','email'], 'string', 'max' => 256],
情景功能

 public function scenarios() {
        $scenarios = parent::scenarios();
        $scenarios['insert2'] =  ['firstname', 'status'];
        return $scenarios;
    }
在控制器中:

$model = new User();
$model->scenario = "insert2";
$model->load($data);
print_r($model);
Print\r从以下地址返回空的电子邮件:

请注意,正在填充的数据由setAttributes()进行安全检查

现在,签名:

public void setAttributes ( $values, $safeOnly = true )
其中
$safeOnly
设置为
true
意味着只能对安全属性进行赋值。安全属性是与当前$scenario中的验证规则关联的属性


因此,方案中必须包含电子邮件。

在Yii2中,当您希望将规则应用于某些方案时,可以指定规则的on属性,如下所示

 public function rules()
    {
        return [

            //rule applied only in scenario 'insert2'
            [['first_name','status'], 'required','on' => 'insert2'],


            //rule applied  in all scenarios 
            ['email','safe'],

            //rule applied only in scenario 'insert3'
            [['first_name','status','email'], 'required','on' => 'insert3'],       
        ];
    }
现在,如果您在控制器中指定
$model->scenario=“insert2”
,则需要名字和状态,如果您给出任何值,电子邮件将被保存,因为
['email','safe']
规则也适用于此处

如果您在控制器中指定
$model->scenario=“insert3”
,则名字、状态和电子邮件现在是必填字段,规则
['email','safe']
也将应用

请注意,您不能在此处使用
public function scenarios(){..


您的“插入2”方案不包括
email
属性,因此当然不会大量分配。您对此有何惊讶?在insert2方案中,email不是必填字段,但如果它出现,则应该插入。这是我的要求。如果我在方案中包括email,则email将是必填字段。不,它不像e.只有在为该字段添加了验证规则
required
时才需要。谢谢..我在规则中犯了一个错误并已修复。您的回答有助于修复该问题。