我使用了名为revisionable的软件包,因此我尝试将其添加到package.json
并运行迁移,一切正常。
但是当我尝试创建记录然后更新它们时,它没有填写修订表吗?
我正在使用"venturecraft/revisionable": "^1.28",
和 Laravel 5.5
这是我的模型
中的代码这就是我在模型
中所做的事情use Venturecraft\Revisionable\Revisionable;
use Venturecraft\Revisionable\RevisionableTrait;
class AnalysisRequest extends Revisionable
{
use SoftDeletes;
use RevisionableTrait;
protected $revisionEnabled = true;
protected $revisionCleanup = true;
protected $historyLimit = 100; //Stop tracking revisions after 500 changes have been made.
protected $dontKeepRevisionOf = array(
'client_id', 'service_id', 'categories_id', 'methodologies_id', 'current_version', 'due_date'
);
protected $keepRevisionOf = array(
'sample_description',
'special_instruction',
'status',
'rushable'
);
我什么时候做错了?
有人可以给我一些启示。 预先感谢。
答案 0 :(得分:0)
好的,我对此做了一些挖掘,看来这是该软件包的限制(它不包括updating
事件-ref:vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php
)。
您可以尝试“替代”特征功能并通过以下方式自己添加事件:
class AnalysisRequest extends Model {
use RevisionableTrait {
bootRevisionableTrait as protected unused;
}
....
//Override trait function
public static function bootRevisionableTrait() {
static::saving(function ($model) {
$model->preSave();
});
static::saved(function ($model) {
$model->postSave();
});
static::created(function($model){
$model->postCreate();
});
static::deleted(function ($model) {
$model->preSave();
$model->postDelete();
});
//Add in the update events
static::updating(function ($model) {
$model->preSave();
});
static::updated(function ($model) {
$model->postSave();
});
}
}
答案 1 :(得分:0)
对于在那里使用此package的用户。新版本的 Laravel 没问题。
问题是通过使用laravel的雄辩方法,尤其是使用 update 方法。
因此,无需像下面的示例一样更新模型。
$analysis_request = AnalysisRequest::where('id', $input['id'])->update([
'client_id' => $input['client_id'],
'sample_description' => $input['sample_description'],
'special_instruction' => $input['special_instruction'],
'rushable' => $input['rushable'],
'status' => 'for_testing'
]);
您必须以这种方式进行操作,以修改模型。见下文
$analysis_request = AnalysisRequest::where('id', $input['id'])->first();
$analysis_request->client_id = $input['client_id'];
$analysis_request->sample_description = $input['sample_description'];
$analysis_request->special_instruction = $input['special_instruction'];
$analysis_request->status = 'for_testing';
$analysis_request->save();
如您所见,我使用first()
方法来获取模型并使用save()
更新模型,如果不使用{{ 1}}。
有关github中问题的参考link。
我知道很难那样做。但是现在,如果要创建修订而不是自己手动创建修订版本,您将不得不被迫放弃。但这还是取决于您的情况。
我希望作者在下一版本中对此进行修复。