【问题标题】:codeigniter too many model queries within controller控制器中的codeigniter太多模型查询
【发布时间】:2013-06-02 00:10:27
【问题描述】:

我没有找到类似的话题,所以我问:

如何解决对我的所有 CodeIgniter 控制器功能重复相同模型查询的问题?对于我的网站,我必须在几乎相同的重复数据库查询上构建页眉和页脚,如下所示:

class Main extends CI_Controller
       {
       public function aboutus()
    {
    $this->load->model("read_db");
    $commondata["title"] = "Company - ".lang("aboutus");
    $commondata["mainmenu"] = $this->read_db->db_mainmenu();
    $commondata["mainprodcat"] = $this->read_db->db_allprodmaincat();
    $commondata["bestselling"] = $this->read_db->db_bestselling();
    $commondata["brochures"] = $this->read_db->db_allbrochures();
    $this->load->view("headerview", $commondata);

    $contentdata["aboutus"] = $this->read_db->db_aboutus();
    $this->load->view("view_aboutus", $contentdata);

    $this->load->view("footerview");
    }

public function contact()
    {
    $this->load->model("read_db");
    $commondata["title"] = "Company - ".lang("contact");
    $commondata["mainmenu"] = $this->read_db->db_mainmenu();
    $commondata["mainprodcat"] = $this->read_db->db_allprodmaincat();
    $commondata["bestselling"] = $this->read_db->db_bestselling();
    $commondata["brochures"] = $this->read_db->db_allbrochures();
    $this->load->view("headerview", $commondata);

            $contentdata["aboutus"] = $this->read_db->db_contact();
    $this->load->view("contactview", $contentdata);

    $this->load->view("footerview");
    }

       *further functions like this*
       }

是否可以将相同的重复模型调用外包给另一个函数或文件? 非常感谢您的任何建议。

【问题讨论】:

  • 不是一个直接的答案,所以我把它写成评论,但你应该考虑缓存这些数据。您可以每小时生成一次,而不是每次调用生成一次页脚。 Smarty 有这样的缓存处理,Memcache 就是为此而生的,Redis 值得一试。
  • @ZsoltSzilagy CodeIgniter 有自己的缓存处理,非常好。
  • @ZsoltSzilagy Köszi Zsolt!这是个好主意,但我想我仍然必须在第一次调用它时生成页面,即使它会被兑现。

标签: codeigniter model controller


【解决方案1】:

您可以在模型中创建一个组函数,然后只从控制器调用该函数。 例如:

型号

function db_bundle() {
    $data = array();
    $data["mainmenu"] = $this->db_mainmenu();
    $data["mainprodcat"] = $this->db_allprodmaincat();
    $data["bestselling"] = $this->db_bestselling();
    $data["brochures"] = $this->db_allbrochures();
    return $data;
}

控制器

$commondata = $this->read_db->db_bundle();

请注意,您可以将呼叫按需要它们的页面分组,而不是捆绑,这样您就可以为联系人、关于我们等设置单独的组......或者您可以让您的捆绑函数接受允许您使用的参数控制哪些函数应该和不应该从内部调用。

【讨论】:

  • 谢谢 Shomz,我之前尝试过,但由于某种原因它不起作用(我可能没有将 $data 声明为数组)。现在我用你的代码建议再次尝试,效果很好。再次感谢!
  • 不客气...可能是您忘记从模型调用中删除read_db。如果它对您有帮助,请不要忘记接受答案。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多