如何正确使用模型打印出优雅的结果

时间:2017-08-23 17:18:17

标签: php codeigniter codeigniter-3

我是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 } ?>

尽管有成千上万种方法可以给猫皮肤,我想知道哪种方法是正确的:对每个元素进行特定查询并打印优雅的输出或优化结果。

0 个答案:

没有答案