gpt4 book ai didi

php - Laravel 日志对多对多关系的修订

转载 作者:行者123 更新时间:2023-12-03 02:27:29 25 4
gpt4 key购买 nike

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

很抱歉问了这个广泛的问题,但我被困住了,真的不知道该去哪里。任何提示或有用的文档将不胜感激。

我想使用可修订库,但实际上我只需要向修订表中添加一条记录,其中包含相应数据透视表中已更改的数据,但我不知道如何执行此操作。提前致谢。

最佳答案

虽然目前没有本地方法可以做到这一点,但有几个选择。我在某些需要将 ModelB 的保存附加到 ModelA(或任何场景)的模型上所做的事情是在类中创建一个全局函数(或在 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() Hook 中调用 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);
}

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

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

关于php - Laravel 日志对多对多关系的修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com