Laravel 记录多对多关系的修订

Laravel log revisions for many-to-many relationships

我是一名全新的 Laravel 开发人员,我正在使用 VentureCraft Revisionable 库来记录模型修订。我需要记录多对多模型的修订,据我了解 Revisionable 不支持此功能。我看过其他图书馆,但他们似乎也没有。有什么办法可以做到这一点? IE。记录没有模型 类 的枢轴 table 的更改?

很抱歉提出这个广泛的问题,但我被卡住了,真的不知道该从哪里开始。非常感谢任何提示或有用的文档。

我想使用 Revisionable 库,但实际上我只需要在修订 table 中添加一条记录,其中包含已更改的相应数据透视表 table(s) 中的数据,并且我不知道该怎么做。提前致谢。

虽然目前没有本地方法可以执行此操作,但有几个选项。我在某些模型上所做的,我需要将 ModelB 的保存附加到 ModelA(或任何场景)是在 class 中(或在 helpers.php 中使用)中的全局函数来执行此操作:

/**
 * Creates a revision record.
 *
 * @param object $obj
 * @param string $key
 * @param mixed $old
 * @param mixed $new
 *
 * @return bool
 */
public static function createRevisionRecord($obj, $key, $old = null, $new = null)
{
    if (gettype($obj) != 'object') {
        return false;
    }
    $revisions = [
        [
            'revisionable_type' => get_class($obj),
            'revisionable_id' => $obj->getKey(),
            'key' => $key,
            'old_value' => $old,
            'new_value' => $new,
            'user_id' => vms_user('id'),
            'created_at' => new \DateTime(),
            'updated_at' => new \DateTime(),
        ]
    ];
    $revision = new \Venturecraft\Revisionable\Revision;
    \DB::table($revision->getTable())->insert($revisions);
    return true;
}

然后稍后只需从我的 save() 挂钩中调用 MyHelperClass::createRevisionRecord()

public function save(array $options = [])
{
    // $old = $this->getOriginal('key');
    // $new = $this->key;
    // Let's say this is linked to \App\SomethingElse via 'something_id'

    MyHelperClass::createRevisionRecord(\App\SomethingElse::find($this->something_id), 'custom_field', $old, $new);

    // Do actual save.
    return parent::save($options);
}

这不是最优雅的方式,但这是我第一个可行的 hacky 选项。

话虽这么说.. Revisionable v2.0+ 中将内置此功能,正在开发中!