2013-03-09 42 views
0

是否有辦法破解codeigniter,以便在進行任何插入/更新時默認允許它將timepan和user_id插入到表中的特定列中?全球創建者,任何插入查詢的時間跨度

我在數據庫8個表中,都含有(UPDATE_TIME,updated_by)列,我想設置笨的活動記錄,這樣,當曾經和更新/插入是發生它全自動填充update_time=time() and update_by=$this->session->userdata('user')->id;

還對同一個概念我想要刪除行動更新列(存檔)= 1而不是刪除(因爲我的mysql用戶不具有刪除記錄訪問無論如何)

是否有可能?

回答

1

如果你想破解CI做到這一點,你應該看看在系統/驅動器/ DB_Active_rec.php(假設你使用CI活動記錄功能)

例如,您可以插入當前時間通過修改該文件中的更新方法進行更新。更改此:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL) 
{ 
    // Combine any cached components with the current statements 
    $this->_merge_cache(); 

    if (! is_null($set)) 
    { 
     $this->set($set); 
    } 
      [...] 

到:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL) 
{ 
    // Combine any cached components with the current statements 
    $this->_merge_cache(); 

    // start of Insert updated_time hack 
    $time_format = 'Y-m-d H:i:s'; 
    $set['update_time'] = date($time_format); 
    // end of hack 

    if (! is_null($set)) 
    { 
     $this->set($set); 
    } 
      [...] 
0

插入或更新記錄時,您可以使用現有的functionality of mysql自動更新update_time列。但是,更新user_id是您必須從應用程序手動執行的操作。

你的其他要求通常被稱爲軟刪除有些人,你通過在列上標記一個標記行將其標記爲已刪除。這是可能的,但是您必須確保所有的選擇和更新查詢都避免了打開此標誌的行。

最好是您仔細構建您的模型方法來堅持這兩個應用程序的要求。您可以使用CI的extending the core Model來定製更新/選擇查詢,這些查詢將由所有擴展MY_Model的子類使用。

+0

關於如何任何說明? – Zalaboza 2013-03-10 12:23:31

+0

*是*我的描述*如何*做到這一點。我不能寫一半你的應用程序 - 到目前爲止已經嘗試過了嗎? – dakdad 2013-03-10 17:28:46