Yii2:对数据库表无关的类内变量执行CRUD操作遇阻
Yii2中ActiveRecord自定义非表字段提交后未更新的解决办法
问题原因
你定义的$customVariable是与数据库表列无关的公共变量,而ActiveRecord的save()方法仅负责处理和数据库表字段绑定的属性,不会对自定义非表字段进行持久化操作,所以表单提交后看似成功,但变量内容并未被保存。
解决方案
方案1:使用Session临时存储(适合会话内保存)
如果只需要在用户会话周期内保留该变量的值,可以将其存入Session:
public function actionCrud() { $model = new CustomModel(); // 编辑场景时从Session读取值赋值给模型 if (Yii::$app->session->has('custom_variable')) { $model->customVariable = Yii::$app->session->get('custom_variable'); } if ($model->load(Yii::$app->request->post())) { // 将自定义变量存入Session Yii::$app->session->set('custom_variable', $model->customVariable); return $this->redirect(['custom-model/index']); } return $this->render('_form', [ 'model' => $model, ]); }
方案2:添加数据库字段(持久化存储)
如果需要长期保存该变量的值,直接给CustomModel对应的数据库表添加custom_variable字段,无需修改模型代码(Yii2会自动识别新增字段),此时save()方法会自动将该字段的值写入数据库。
方案3:改用基础Model类(无需数据库表绑定)
如果该模型主要用于表单提交处理,不需要操作数据库表,可以将模型继承自\yii\base\Model而非ActiveRecord,再自行处理变量的存储逻辑:
class CustomModel extends \yii\base\Model { public $customVariable; public function rules() { return [ [['customVariable'], 'safe'], ]; } }
之后可根据需求将变量值存入文件、缓存或数据库。
内容的提问来源于stack exchange,提问作者Abdelilah Dahdahi
相关产品推荐
相关产品推荐

