2015-10-03 22 views
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] | 
+----------+--------+-----+-----------+-----------+--------------+ 

回合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日期取和分組,然後簡單地取最後一組(最近的日期)。但是,我不知道是否有保證日期是相同的。

當從可修訂版本中檢索歷史記錄時,是否有方法通過更新進行分組?

編輯

經順藤摸瓜 - revisionable created_at日期使用內置的->withTimestamps()特質。對於批處理插入中的每個插入(如一個可修改用途),新鮮時間戳將作爲Carbon日期獲取,這意味着(根據我的理解)批處理插入可能具有不同的created_at日期。

+0

小心解釋downvote? – Chris

回答

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(); 
+0

同意 - 第一個出來,因爲時間是時間和所有。第二個意思是延長包裝和外牆等,並希望避免這種情況。我可能能夠進入它,我會更深入 – Chris

+0

我最終要爲你的第二個答案。乾杯 – Chris

相關問題