在Codeigniter中将旧的过程PHP函数转换为模型视图控制器(MVC)

在Codeigniter中将旧的过程PHP函数转换为模型视图控制器(MVC),php,mysql,codeigniter,model-view-controller,Php,Mysql,Codeigniter,Model View Controller,我是模型视图控制器的新手,我开始在Codeigniter中编码。我基本上是将我的项目转换成MVC,然而,我遇到了这个函数(如下),我想将其拆分成MVC。我有100个这样的函数,如果我能找到最好的方法,我就能自己把剩下的函数转换成MVC 此函数包含PHP、Mysql和HTML所有内容。就像我们分别拆分查询和HTML一样,我也希望使用Codeingiter框架来完成这项工作。 即使您无法使用codeigniter默认函数回答,也请告诉我如何拆分 这是: $fetch_projections = m

我是模型视图控制器的新手,我开始在Codeigniter中编码。我基本上是将我的项目转换成MVC,然而,我遇到了这个函数(如下),我想将其拆分成MVC。我有100个这样的函数,如果我能找到最好的方法,我就能自己把剩下的函数转换成MVC

此函数包含PHP、Mysql和HTML所有内容。就像我们分别拆分查询和HTML一样,我也希望使用Codeingiter框架来完成这项工作。 即使您无法使用codeigniter默认函数回答,也请告诉我如何拆分

这是:

 $fetch_projections = mysql_query("SELECT issue_id, emp_name, employeeId, sum(actualHoursPerDay) as ss FROM day_projections WHERE date = '$today' GROUP BY employeeId ORDER BY emp_name ASC");
    while ($r = mysql_fetch_array($fetch_projections)) {
        $maes_array[] = $r['issue_id'];
        $all_maes_for_emp = implode($maes_array);
        // echo $r['emp_name'] $r['ss'].'<br/>'; 

        $split_up_query = mysql_query("SELECT issue_id, actualHoursPerDay FROM day_projections WHERE date = '$today' AND emp_name = '" . $r['emp_name'] . "'");
        while ($t = mysql_fetch_array($split_up_query)) {
            $kk[] = $t['issue_id'] . ' = ' . $t['actualHoursPerDay'] . ' hrs';
        }
        $pp = implode(', ', $kk);
        $cap = round((((8 - $r['ss']) / 8) * 100), 2);
        echo '<tr><td>' . $r['emp_name'] . '</td><td>' . $cap . '%</td><td>' . $r['ss'] . ' hrs</td><td>' . $pp . '</td></tr>';
        unset($maes_array);
        unset($kk);
    }
$fetch_projections=mysql_query(“选择issue_id,emp_name,employeeId,sum(actualHoursPerDay)作为ss FROM day_projections,其中date='$today'按employeeId分组,按emp_name排序ASC”);
而($r=mysql\u fetch\u数组($fetch\u投影)){
$maes_数组[]=$r['issue_id'];
$all_maes_for_emp=内爆($maes_数组);
//回音$r['emp_name']$r['ss'].
; $split\u up\u query=mysql\u query(“选择问题id,实际时间从日期开始,其中日期='$today'和emp\u name='”””。“”); 而($t=mysql\u fetch\u数组($split\u up\u query)){ $kk[]=$t['issue_id'].='.$t['actualHoursPerDay'.'hrs'; } $pp=内爆(',',$kk); $cap=圆形(((8-$r['ss'])/8)*100),2); 回音“.$r['emp_name'..”..$cap.%.$r['ss'.]hrs.$pp.”; unset($maes_数组); 未结算(千美元); }

谢谢

我假设您了解面向对象编程、PHP5.5+和Codeigniter v2+。 下面的代码展示了如何在codeigniter中实现MVC。 在codeigniter框架下,有许多文件夹,如模型、视图、控制器 ,config等。如前所述放置这些(在代码下面)

模型(与数据库相关的东西/查询等)示例_Model.php。 将此文件放在“应用程序/模型”文件夹下

class Example_model extends CI_Model{

function __construct() {
    parent::__construct();
}

public function getData($today=""){

$query="SELECT issue_id, emp_name, employeeId, sum(actualHoursPerDay) as ss 
FROM day_projections WHERE date = $today GROUP BY employeeId ORDER BY 
emp_name ASC";

$result=$this->db->query($query);

    if ($result->num_rows > 0) {
        foreach ($result->result() as $row) {
            $data[] = $row;
        }

        return $data;
    } else {
        return FALSE;
    }

}


}
注意:您必须在项目目录的“application/config”文件夹中的autoload.php中自动加载“database”库,或者像这样将其加载到上面的构造函数中

 $this->load->library('database);

Controller(帮助控制用户请求/数据流/路由等)Example.php,将此文件置于“应用程序/控制器”下


查看(演示文稿/用户可见页面等)index_View.php,将此文件置于“应用程序/视图”下


1.
2.

注:更多的抽象信息

您的代码有点古怪,不是最优的。您正在调用sql查询并在不需要的地方进行迭代。我要做的是利用MYSQL的
GROUP_CONCAT
,然后使用Codeigniter将其全部转换为MVC。以下是我的方法:

模型:application\models\My\u Model.php

模型表示您的数据结构。通常是您的模型 类将包含帮助您检索、插入和删除的函数 更新数据库中的信息

控制器:application\controllers\My\u Controller.php

控制器充当模型、视图和, 以及处理HTTP请求和 生成一个网页

View:application\views\my\u View.php

视图是呈现给用户的信息。景色 通常是网页,但在CodeIgniter中,视图也可以是 页面片段,如页眉或页脚。它也可以是RSS页面,或者 任何其他类型的“页面”


%
高分辨率分光计
资料来源:


希望这有帮助。

代码没有给我任何错误。非常值得一提的是,您可以理解我的代码部分,而不需要完整的项目,并且能够如此完美地转换和运行它。非常感谢你。我已经接受了答案。非常感谢您对代码进行了优化。这只是一个小问题,您使用了基于codeigniter的函数来运行查询。我们不能使用基于mysql或mysqli的传统查询吗?理解和应用这些函数是令人恼火的。我的意思是,我可以用一两行代码编写查询,但由于codeigniter,我编写了很多额外的代码。还要告诉我们是否可以使用mysqli_查询,那么我们要给出的第一个参数的名称是什么?我知道codeigniter中不推荐使用mysql\u查询。是的,如果您愿意,您仍然可以写出普通的mysql,您只需要使用
$this->db->query(“从任何地方选择*)
。但是我不推荐。这取决于你,看看这里
class Example extends CI_Controller {

   function __construct() {
    parent::__construct();

  $this->load->model('Example_model');

   }


public function index(){

$today=now();
$result=$this->Example_model->getData($today);

$this->load->view('index_view',['result'=>$result]);

  }


  }
<body>
     <table>
           <tr>1</tr>
           <tr>2</tr>

           <?php   foreach($result as $r):    ?>
           <td><?=     $r->emp_name    ?></td>

           <?php      endforeach;     ?>

     </table>


</body>
class My_model extends CI_MODEL{

    function fetch_projections($today){
        $this->db->select("emp_name, sum(actualHoursPerDay) as ss, GROUP_CONCAT( issue_id,'=',actualHoursPerDay,'hrs' SEPARATOR ';') as pp");
        $this->db->from("day_projections");
        $this->db->where("date" , $today);
        $this->db->group_by("employeeId");
        $this->db->order_by("emp_name" , "asc");
        $query = $this->db->get();
        return $query->result();
    }

}
class My_controller extends CI_Controller {

    function calculate() {
        $today = "0000-00-00"; // or whatever code you have to come up for "today"
        $this->load->model("My_model");
        $projections_results = $this->My_model->fetch_projections($today);
        if ($projections_results) {
            foreach ($projections_results as $projection) {
                $projection->cap = round((((8 - $projection->ss) / 8) * 100), 2);
            }
        }
        $view_data["results"] = $projections_results;
        $this->load->view("my_view", $view_data);
    }

}
<table>
    <?php foreach ($results as $res) { ?>
        <tr>
            <td><?= $res->emp_name ?></td>
            <td><?= $res->cap ?>%</td>
            <td><?= $res->ss ?>hrs</td>
            <td><?= $res->pp ?></td>
        </tr>
    <?php } ?>
</table>