Laravel VentureCraft可修订版本在更新模型时不适用于Laravel 5.5

时间:2018-07-12 14:12:36

标签: php laravel laravel-5 versioning revisionable

我使用了名为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'
    );

我什么时候做错了?

有人可以给我一些启示。 预先感谢。

2 个答案:

答案 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

我知道很难那样做。但是现在,如果要创建修订而不是自己手动创建修订版本,您将不得不被迫放弃。但这还是取决于您的情况。

我希望作者在下一版本中对此进行修复。