2012-07-10 82 views
1

我目前正在嘗試創建一個相當基本的Web應用程序,它有可能爲用戶及其組織保存敏感(ish)數據。CodeIgniter - 插入查詢的活動記錄緩存

我原本打算將所有用戶輸入的記錄數據存儲在一個數據庫中,並將所有應用程序數據存儲在另一個數據庫中。這些數據將存儲在共享數據庫中,其中包含user_id和org_id以針對所有表中的所有記錄進行分隔。

爲了儘量減少代碼錯誤和數據泄漏的風險我已經研究到自動附加標準「其中」語句來我的活動記錄查詢使用Active Record Caching

$this->db->start_cache(); 
$this->db->where('user_id',$_SESSION['user_id']); 
$this->db->where('org_id',$_SESSION['org_id']); 
$this->db->stop_cache(); 

這是輝煌的,將節省很多麻煩的能力。然而,根據該文件 http://codeigniter.com/user_guide/database/active_record.html#caching我也應該能夠使用此更新(設置方法):

注:下面的語句可以被緩存:選擇,來自加盟,其中一樣,GROUP_BY,有,order_by,set。

看着active_record類「DB_active_rec.php」,有代碼存在提供緩存在幾個方法(select,where等)。

if ($this->ar_caching === TRUE) 
{ 
...do caching stuff 

從我可以告訴這似乎是從設置方法丟失。

我不知道我在回答什麼問題,但希望這會是我只是做錯了!

+0

我有一個問題的理解,你想完成什麼? Active Record緩存使您可以重用部分查詢。例如,你的' - > where()'將被放到你的下一個SQL語句中。 – 2012-07-10 11:53:00

+0

Steven,我的要求是確保數據始終通過這些表中的org_id和user_id進行過濾。這可以通過主動記錄緩存完成,我的困惑在於插入數據,其中我也想自動插入這些值。我認爲他們的文檔是誤導性的,暗示緩存可用於設置的方法。我現在的問題,我想我會如何去自動插入這兩個字段的所有表插入查詢。 – idodev 2012-07-10 12:56:10

回答

1

您無法緩存更新語句。這沒有多大意義。 在您的更新中,您使用$this->db->where()方法,該方法實質上是一個選擇。這部分可以被緩存,通過這樣做你可以爲自己節省一個選擇語句。

+0

好吧,我一定會明白你的意思,一個緩存的where語句會涉及插入查詢是不正確的。在這種情況下,他們的文檔有點不對,但那不是在這裏或那裏。是否有一種方法可以自動「填充」這些信息,或者是否必須爲每個模型/查詢完成這些信息? – idodev 2012-07-10 12:49:40

+1

你不能在插入中使用它,因爲沒有哪裏clausule。你可以在更新中使用它。如果你在SELECT中使用 - >('where x = 1'),你可以用它來稍後更新。所以我的意思是你不能緩存實際的更新,但你可以重用更新的WHERE部分。 – Robert 2012-07-10 12:58:29

+0

啊哈!所以設置是指更新!不知道爲什麼最初沒有計算。我希望自動插入這些數據可能不太實際。謝謝羅伯特。 – idodev 2012-07-10 13:05:48