我如何才能获得可修订包中的最新一组更改?
How do I get just the most recent set of changes in the revisionable package?
目前我有可修改的特性,可以正确地存储和获取模型经历变化的历史。
模型的每次更新都会为每个更改的字段创建一条记录。
是否可以按更改对这些记录进行分组?
示例时间:
第 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
日期获取和分组,然后简单地获取最后一组(最近的日期)。但是我不知道是否可以保证日期相同。
有没有办法在从 revisionable 中检索历史记录时按更新分组?
编辑
经过更深入的调查 - 可修改的 created_at 日期正在使用内置的 ->withTimestamps()
特征。对于批量插入中的每个插入(就像一个可修改的使用),一个新的时间戳被抓取为 Carbon 日期,这意味着(根据我的理解)批量插入可以有不同的 created_at 日期。
有两种可能:
第一个:
您搜索最新条目
$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();
目前我有可修改的特性,可以正确地存储和获取模型经历变化的历史。
模型的每次更新都会为每个更改的字段创建一条记录。
是否可以按更改对这些记录进行分组?
示例时间:
第 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
日期获取和分组,然后简单地获取最后一组(最近的日期)。但是我不知道是否可以保证日期相同。
有没有办法在从 revisionable 中检索历史记录时按更新分组?
编辑
经过更深入的调查 - 可修改的 created_at 日期正在使用内置的 ->withTimestamps()
特征。对于批量插入中的每个插入(就像一个可修改的使用),一个新的时间戳被抓取为 Carbon 日期,这意味着(根据我的理解)批量插入可以有不同的 created_at 日期。
有两种可能:
第一个: 您搜索最新条目
$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();