目前我有可修改的特性正确存储和获取模型的历史记录经历了变化。
模型的每次更新都会为每个已更改的字段创建一条记录。
是否可以通过更改对这些记录进行分组?
示例时间:
第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日期。
答案 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();