2012-07-10 98 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