$model->dirtyAttributes,如何控制数据库不同字段是否有post变化。 [ 2.0 版本 ]
在用$model->dirtyAttributes
的时候。遇到一个很奇怪的问题,以user表为例,如果在Models中rules里面定义 [['status'],'integer']
不管status的值是否改变,打印$model->dirtyAttributes都会Array([status] => 10)
,如果去掉[['status'],'integer']
,不管status的值是否改变,打印$model->dirtyAttributes
都会为空。
这个如何判断我提交的数据是否变化。
最佳答案
-
DirtyAttributes :
大概定義 => 顯現汙染的屬性
假使是
INSERT
狀態dirtyAttributes
都應當出現填入的欄位值以下提出
UPDATE
狀態假使我 $model = User::findOne('2'); //抓取 User表中第二筆的資料 var_dump($model->status); //如果 int(2) 範例一 : $model->status = 3; if(empty($model->dirtyAttributes)){ echo "數據無變化"; }else{ echo "數據變化"; } Ans :: "數據變化" 範例二 : $model->status = 2; if(empty($model->dirtyAttributes)){ echo "數據無變化"; }else{ echo "數據變化"; } Ans :: "數據無變化"
參考文獻 :
En :
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#dirty-attributes共 4 条回复if ( Yii::$app->request->isPost ) { //$model->status = 0; if ($model->load(Yii::$app->request->post())) { if(empty($model->dirtyAttributes)){ echo "數據無變化"; }else{ echo "數據變化"; } } }
数据变化
if ( Yii::$app->request->isPost ) { //$model->status = 0; //if ($model->load(Yii::$app->request->post())) { if(empty($model->dirtyAttributes)){ echo "數據無變化"; }else{ echo "數據變化"; } //}
数据无变化
问题出在
$model->load(Yii::$app->request->post())
那解決了?
我上述是提供方案是了解dirtyAttributes
在INSERT
,UPDATE
差異像是 Insert
public function actionInsert() { $model = new User (); $model->load(Yii::$app->request->post()); }
像是 Update
public function actionUpdate($id = NULL) { $model = User::findOne($id); $model->load(Yii::$app->request->post()); }
對 dirtyAttributes 行為上就是有更動的值會秀出
但這是你在 dirtyAttributes 之前該確定的
acking 上海
注册时间:2012-05-16
最后登录:2024-05-25
在线时长:65小时55分
最后登录:2024-05-25
在线时长:65小时55分
- 粉丝13
- 金钱2565
- 威望0
- 积分3215