我是模型视图控制器的新手,开始在Codeigniter中进行编码。我基本上是在把我的项目转换成MVC,然而,我遇到了这个函数(下面(,我想把它分解成MVC。我有100个这样的函数,如果我能找到最好的方法,我就能自己把剩下的函数转换成MVC。
这个函数将PHP、Mysql和HTML的所有内容都包含在一起。就像我们将查询和HTML分开一样,我也想使用Codeingter框架来实现这一点。即使您无法使用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);
}
感谢
您的代码有点古怪,而且不是最佳的。你正在回忆一个sql查询,并在不需要的地方迭代。我要做的是利用MYSQL的GROUP_CONCAT
,然后使用Codeigner将其全部转换为MVC。这是我的方法:
模型: application''models''My_Model.php
模型表示您的数据结构。通常是您的模型类将包含帮助您检索、插入和更新数据库中的信息。
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();
}
}
控制器:application''controllers''My_Controller.php
控制器充当模型、视图和应用程序之间的中介,以及处理HTTP请求所需的任何其他资源,以及生成网页。
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);
}
}
视图:application''views''my_View.php
视图是呈现给用户的信息。A视图通常是一个网页,但在CodeIgniter中,视图也可以是类似页眉或页脚的页面片段。它也可以是RSS页面,或者任何其他类型的"页面"。
<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>
来源:http://www.codeigniter.com/userguide3/overview/mvc.html
希望这能有所帮助。
我假设您了解面向Obect的编程、php 5.5+和Codeigniter v2+。下面的代码展示了如何在codeigniter中实现MVC。在代码点火器框架下有许多文件夹,如模型、视图、控制器,config etc.put这些(下面的代码(如前所述。
模型(与数据库相关的东西/查询等(Example_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(帮助控制用户请求/数据流/路由等(例如.php,将此文件放在"application/controllers"下。
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]);
}
}
查看(演示文稿/用户可见页面等(index_View.php,将此文件放在"application/views"下。
<body>
<table>
<tr>1</tr>
<tr>2</tr>
<?php foreach($result as $r): ?>
<td><?= $r->emp_name ?></td>
<?php endforeach; ?>
</table>
</body>
注意:有关更多摘要信息。http://www.codeigniter.com/userguide2/overview/at_a_glance.html