我是CodeIgniter 3的新手,我用它来构建任务管理器(Claritask.com)。另外,我刚刚开始学习如何编程,所以如果我没有意义,请事先原谅我,并且我会在评论中澄清。
当我构建列出特定任务的特定项目页面时,我很想知道我是否做得对。
我认为我需要的是:属于特定项目的任务&项目的名称。我可以让这个工作得很好,但我想知道我的方法是否正确。
我使用了两种不同的方法
我使用的第一种方法是处理我的模型上有两个函数,触发两个查询:
// Show project tasks
function get_tasks($project_id) {
$this->db->from('tasks');
$this->db->where('tasks.project_id', $project_id);
$this->db->order_by('tasks.created_date', 'DESC');
return $this->db->get()->result_array();
}
// Show single project name
function get_single_project($project_id) {
$this->db->from('projects');
$this->db->where('projects.id', $project_id);
return $this->db->get()->row_array();
}
然后在我的控制器上
$data['tasks'] = $this->project_model->get_tasks($project_id);
$data['project_name'] = $this->project_model->get_single_project($project_id)['project_name'];
这正如预期的那样工作,并产生一个优雅的数组(特别是在没有任务的项目上)。
array (
'tasks' =>
array (
),
'project_name' => 'Default name',
)
但是我并不想触发两个不同的查询,因此我决定使用任务加入项目,并对数据库进行一次点击,如下所示:
// Show project tasks
function get_project_tasks($project_id) {
$this->db->select("tasks.*, projects.project_name");
$this->db->from('projects');
$this->db->where('projects.id', $project_id);
$this->db->join('tasks', 'tasks.project_id = projects.id', "LEFT");
$this->db->order_by('tasks.created_date', 'DESC');
return $this->db->get()->result_array();
}
然后我的控制器:
$data['tasks'] = $this->project_model->get_project_tasks($project_id);
$data['project_name'] = $data['tasks'][0]['project_name'];
虽然第二种方法仅使用一个查询,但它也会产生一个"空的"数组(下方)在没有任何任务的项目上,并导致在一个foreach'中打印至少一个空行。
array (
'tasks' =>
array (
0 =>
array (
'id' => NULL,
'project_id' => NULL,
'list_id' => NULL,
'task_text' => NULL,
'task_due_date' => NULL,
'created_by' => NULL,
'created_date' => NULL,
'project_name' => 'Website design',
),
),
'project_name' => 'Website design',
)
尽管如此,我还是通过以下方式减轻了这一点:
<?php foreach($tasks as $task) { ?>
<?php if(isset($task['id'])): ?>
<div><?php echo $task['task_text']; ?></div>
<?php endif; ?>
<?php } ?>
尽管有成千上万种方法可以给猫皮肤,我想知道哪种方法是正确的:对每个元素进行特定查询并打印优雅的输出或优化结果。