我想以後還是每$model->save()
在Yii2
之前執行我的自定義代碼。
我想執行這一全球喜歡使用components
等
我想創建一個用戶活動日誌存儲了多少次用戶插入或更新數據庫表中的所有行,所以爲了這個,我想在表中插入或更新數據時運行一些代碼。
任何幫助或建議將不勝感激。
我想以後還是每$model->save()
在Yii2
之前執行我的自定義代碼。
我想執行這一全球喜歡使用components
等
我想創建一個用戶活動日誌存儲了多少次用戶插入或更新數據庫表中的所有行,所以爲了這個,我想在表中插入或更新數據時運行一些代碼。
任何幫助或建議將不勝感激。
Yii2 ActiveRecord
類別有beforeSave
和afterSave
方法。 https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L926
但也許它會更好地對數據庫觸發器做這樣的操作?
正如@patryk提到的ActiveRecord
有beforeSave和afterSave方法。
我用類似下面的存儲新記錄(當現有記錄更新更新日期)創建的日期。這個例子中的代碼當然是微不足道的,但它允許您使用任何您需要的任意代碼,查看佈局以及如何爲新「記錄」和現有代碼分割代碼。
可以將此重寫的方法添加到任何擴展了ActiveRecord
的模型類,以允許父代beforeSave
也被正確調用。
/**
* @inheritdoc
*/
public function beforeSave($insert)
{
if ($insert) {
// This is a new instance of modelClass, run your 'insert' code here.
$this->created_date = time();
}
// Anything else will be run any time a model is saved.
$this->updated_date = time();
return parent::beforeSave($insert);
}
編輯補充: 如果要運行的代碼是你可以創建一個特點和使用特點在每一個模型,讓您可以在一個地方更改的行爲,各型號相同。或者創建一個自定義的ActiveRecord
類來覆蓋每個子類的beforeSave
方法。
創建新類(MyActiveRecord)延伸\警予\ DB \ ActiveRecord的
使用擴展MyActiveRecord到所有的項目模型
例:
class MyActiveRecord extends \yii\db\ActiveRecord
{
public function afterSave($insert, $changedAttributes){
//This will called after every model saved
return parent::beforeSave($insert,$changedAttributes);
}
}
在你的項目中的其他車型
class Customer extends app\models\MyActiveRecord
{
}
我想用它作爲組分或作爲全局函數的東西。我有幾乎80個型號的文件,我很難編輯每個文件並在那裏寫這個代碼。 –
我想用它作爲組分或作爲全局函數。我有幾乎80個型號的文件,我很難編輯每個文件並在那裏寫這個代碼。 –
@FahadAli;在那種情況下,也許是特質或自定義的超類? –
可以請你建議我 –