1

目前,我具有正确存储和获取模型历史的可修订特征,经历了变化。

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

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

示例时间:

第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] |
+----------+--------+-----+-----------+-----------+--------------+

第二轮

$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()特征。对于批量插入中的每个插入(如可修改的使用),一个新的时间戳被抓取为碳日期,这意味着(根据我的理解)批量插入可能具有不同的 created_at 日期。

4

1 回答 1

2

有两种可能:

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

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

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

所以最好用这种方式:

添加另一列来计算更改。每次进行更改(在您的情况下添加 2 个新行)时,都会将整数加一。因此,您知道首先进行了哪些更改,然后进行了第二次更改,依此类推。

//get the latest changes
$latestChange = Changes::orderBy('created_at' 'desc')->first()->saveId;
$latestEntries = Changes::where('savedId', $latestChange)->get();
于 2015-10-03T08:39:15.520 回答