【问题标题】:Yii2 ActiveRecord not saving?Yii2 ActiveRecord 不保存?
【发布时间】:2017-02-18 02:12:51
【问题描述】:

查看:

<?= $form->field($model, 'password2')->passwordInput(['value'=>''])->label(Yii::t('app', 'Password2')) ?>

型号

Class Admin extends ActiveRecord implements IdentityInterface
{

    public $password2;

    public static function tableName() {
        return 'app_users';
    }

    public function rules()
    {
        return [
            [['fullname', 'username', 'password', 'password2', 'role_id'], 'required'],
            ['username', 'unique'],
            ['password2', 'compare', 'compareAttribute'=>'password', 'message'=>Yii::t('app', 'Passwords don\'t match') ],
            [['role_id', 'alive'], 'integer'],
            ['image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024 * 1024 * 2],
            [['access_deadline'], 'safe']
        ];
    }

我正在尝试保存模型,但抛出错误:"Password2 is required!"。如何绕过此错误并成功保存模型?

【问题讨论】:

  • 使用验证器“必需”从第一条规则中删除密码 2
  • 没有。我需要我的“重新输入密码”字段,但我不需要将此字段存储在数据库中
  • 我认为 password2 字段不会存储在数据库中。你确定你得到的错误是来自数据库插入查询而不是来自 Yii 验证规则?
  • 是的,我有“需要密码2”的验证错误
  • 您是要在 create 或 update 方法中保存模型吗?

标签: php yii2


【解决方案1】:

你可以如何绕过这个错误成功保存模型使用

$model->save(false);

以这种方式将值保存在b db中而不执行验证

【讨论】:

    【解决方案2】:

    如果我猜对了,您的 SQL DB 中有字段 Password2,它是必填列,这意味着您将无法在该字段为 null 的数据库中保存任何模型,甚至尽管您实际上并不需要它,但在数据库中。

    在我看来,你有三个选择。

    • 您可以转到您的控制器,在$model-&gt;save() 之前,您可以为$model-&gt;password2 字段指定一个您选择的值。
    • 您也可以转到您的数据库,使该字段不需要。从 SQL 中的该字段中取出NOT NULL 选项。但是,请在您的模型中保留所需的选项。这样您的数据库中就不需要它,但您需要在表单中使用它,以检查用户输入的密码是否正确。
    • 使用 scaisEdge 给你的建议

    希望对您有所帮助。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      相关资源
      最近更新 更多