首页 > 解决方案 > 更新模型时,Laravel VentureCraft 可修改无法在 Laravel 5.5 上运行

问题描述

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

我什么时候做错了?

有人可以为我解释一下。提前致谢。

标签: phplaravellaravel-5versioningrevisionable

解决方案


对于那些在那里使用这个的人。新版本的Laravel没有问题。

问题在于使用laravel雄辩的方法,尤其是更新方法。

所以不要像下面这个例子那样更新模型。

$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()save()first()

github中问题的参考链接

我知道这样很难做到。但是现在,如果您想在创建修订时让您的生活更轻松,而不是自己手动进行,那么您将被迫这样做。但是,嘿,这仍然取决于您的情况。

我希望作者在下一个版本中尽快解决这个问题。


推荐阅读