CodeIgniter选择数据添加不必要的查询?

时间:2011-07-08 02:55:35

标签: php codeigniter

我刚开始使用CodeIgniter,对结果非常满意。

我注意到的一件事是我似乎在选择模型的不同部分的不同部分。
一个例子是我需要在页面上获取当前用户的用户名,然后再向下我需要他们的电子邮件地址。这些是模型中的单独函数(因此,单独的查询)。让我知道我可以将它们合并到一个查询中(节省开销)让我感到很恼火,但如果我这样做,那么我将放弃MVC模型给我的模块化(在很多其他页面上我只需要用户名或电子邮件,而不是两者)。关于如何通过这个的任何建议?

1 个答案:

答案 0 :(得分:0)

  
    

是的,但我有一个特定的函数返回行的一部分,另一个函数返回行的另一部分。我需要这个,因为大多数页面只需要行的一部分,但有些页面需要两个,这导致我的代码运行两个查询。这只是一个例子。有许多。如果有这样的设计模式,我很好奇。

  

你基本上是在谈论延迟加载。因此,在您的模型中,您使用某些东西来跟踪持久化属性的状态,即它们是否已被加载,修改,或者模型是否全新且尚未在数据库中。然后,每个属性的getter首先检查状态,如果某些东西尚未加载且模型不是“new”,那么他们会查询该属性并在返回值之前将其设置在模型上。

所以你的魔法可能看起来像(伪代码 - 你必须翻译成CI):

public function __get($property){
   if($this->isPersisted($property) && !$property->isLoaded() && !$this->isNew()){
      $this->$property = $this->db
        ->select($this->getColumn($property))
        ->from($this->tableName)
        ->where('id = ?', $this->id)
        ->fetchColumn(0);
   }

   return $this->property;
}