Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
codeigniter控制器内的模型查询过多_Codeigniter_Model_Controller - Fatal编程技术网

codeigniter控制器内的模型查询过多

codeigniter控制器内的模型查询过多,codeigniter,model,controller,Codeigniter,Model,Controller,我没有找到类似的话题,所以我想问: 如何克服对所有CodeIgniter控制器函数重复相同模型查询的问题?对于我的站点,我必须在几乎相同的重复数据库查询上构建页眉和页脚,如下所示: class Main extends CI_Controller { public function aboutus() { $this->load->model("read_db"); $commondata["title"] = "Company -

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

如何克服对所有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*
       }
是否可以将相同的重复模型调用外包给另一个函数或文件?
非常感谢您的建议。

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

模型

控制器

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

请注意,您可以根据需要的页面对呼叫进行分组,而不是捆绑,这样您就可以为联系人、关于我们的信息等建立单独的分组。。。或者,您可以让bundle函数接受参数,这些参数将允许您控制哪些函数应该从内部调用,哪些函数不应该从内部调用。

这不是一个直接的答案,所以我将其作为注释来写,但您应该考虑缓存这些数据。您可以每小时生成一次页脚,而不是每次调用生成一次页脚。Smarty有这样的缓存处理,Memcache就是为它而设计的,Redis非常值得一试。@ZsoltSzilagy CodeIgniter有自己的缓存处理,它非常好。@ZsoltSzilagy Köszi Zsolt!这是一个好主意,但我想我还是必须在第一次调用页面时生成它,即使它将被兑现。谢谢你,Shomz,我以前尝试过,但由于某种原因它不起作用(我可能没有将$data声明为数组)。现在我再次尝试了你的代码建议,效果非常好。又来了!不客气。。。可能是您忘记从模型调用中删除
read_db
。如果答案对你有帮助,别忘了接受。干杯
$commondata = $this->read_db->db_bundle();