如何获得可修订包中最新的更改集?

时间:2015-10-03 00:53:34

标签: laravel revisionable

目前我有可修改的特性正确存储和获取模型的历史记录经历了变化。

模型的每次更新都会为每个已更改的字段创建一条记录。

是否可以通过更改对这些记录进行分组?

示例时间:

第1轮

$model = MyModel::find(1);
$model->a = 5;
$model->b = 6;
$model->save();

这导致以下条目

+----------+--------+-----+-----------+-----------+--------------+
| rev_type | rev_id | key | old_value | new_value |  created_at  |
+----------+--------+-----+-----------+-----------+--------------+
| MyModel  |      1 | a   |         0 |         5 | [first date] |
| MyModel  |      1 | b   |         0 |         6 | [first date] |
+----------+--------+-----+-----------+-----------+--------------+

第2轮

$model = MyModel::find(1);
$model->a = 555;
$model->b = 666;
$model->save();

这导致以下条目

+----------+--------+-----+-----------+-----------+---------------+
| rev_type | rev_id | key | old_value | new_value |  created_at   |
+----------+--------+-----+-----------+-----------+---------------+
| MyModel  |      1 | a   |         0 |         5 | [first date]  |
| MyModel  |      1 | b   |         0 |         6 | [first date]  |
| MyModel  |      1 | a   |         5 |       555 | [second date] |
| MyModel  |      1 | b   |         6 |       666 | [second date] |
+----------+--------+-----+-----------+-----------+---------------+

在这种情况下,我想抓住记录3和4。

初步思考包括按created_at日期提取和分组,然后简单地提取最后一组(最近的日期)。但是我不知道是否保证日期是相同的。

从可修改版本检索历史记录时,有没有办法按更新进行分组?

修改

经过深入调查 - 可修改的created_at日期使用内置的->withTimestamps()特征。对于批量插入中的每个插入(如可修改的一个插入),新的时间戳被作为Carbon日期获取,这意味着(根据我的理解)批量插入可以具有不同的created_at日期。

1 个答案:

答案 0 :(得分:2)

有两种可能性:

第一个: 您搜索最新的条目

$latestDate = Changes::orderBy('created_at' 'desc')->first()->created_at;
$latestEntries = Changes::where('created_at', $latestDate)->get();

但它不是100%好,因为当插入之间的时间变化时,你会得到错误的结果。

这样更好用:

添加另一列,您可以在其中计算更改。每次进行更改时(在您的情况下添加2个新行),将整数增加1。所以你知道首先做出哪些改变,然后做出第二次等等。

//get the latest changes
$latestChange = Changes::orderBy('created_at' 'desc')->first()->saveId;
$latestEntries = Changes::where('savedId', $latestChange)->get();