2014-01-29 54 views
0

我正在嘗試爲我們的應用程序創建一個日誌記錄界面。我需要跟蹤通過應用程序在數據庫中發生更改的時間。所以當有人更新一個字段時,我需要在表中,列原始值,列新值,時間戳和做出更改的用戶中插入一行到日誌中。對我來說,這樣做的邏輯方法是綁定到laravel中的DB類,所以每次調用它時都會使用更新/刪除方法,它會運行獲取所需信息並將其插入日誌中的新方法。在DB :: update或DB :: delete(laravel,eloquent)上調用其他方法

我需要它在數據庫級別工作我相信,因爲它需要發生從數據庫調用的更新/刪除或雄辯。

我該怎麼做呢?

回答

0

經過搜索和反覆試驗,我以如下方式完成了我的目標。

我創建一個事件偵聽器,我爲放置在/app/events/database.php

用下面

<?php 
Event::listen('illuminate.query', function($query, $bindings, $time, $name) 
{ 
    // Code to log query goes here 
}); 

組織的目的我再放在我的/應用程序/啓動/全球。 php的下列行

include(app_path().'/events/database.php'); 

這現在捕獲所有請求來查詢數據庫使用DB或Eloquent。

1

Eloquent爲您提供了一些不錯的活動,他們甚至在文檔中!誰知道你可以在那裏找到這麼多。 http://laravel.com/docs/eloquent#model-events

+0

問題是有些情況下,Eloquent沒有用於更復雜的查詢,並使用這些事件只捕獲通過雄辯而非DB直接發出的事件。 – projectxmatt

0

,而不是試圖附加的東西到DB層,你有沒有考慮過使用型號觀察員(http://laravel.com/docs/eloquent#model-observers)觀看所有更新和刪除事件,並把你的邏輯在觀察者?

+0

問題是有些情況下,Eloquent不用於更復雜的查詢,並且使用這些事件僅捕獲由雄辯而不是直接發佈的事件。 – projectxmatt