CodeIgniter передает массив с запросами в поле зрения - PullRequest
2 голосов
/ 27 января 2011

Привет У меня возникла проблема с отображением результатов для следующего кода.

Контроллер:

   $datedue = 2011-01-27;
  $username = $this->tank_auth->get_username();
  $sql = "SELECT taskid FROM relationships WHERE username = ? AND datedue = ?"; 
  $tasks = $this->db->query($sql, array($username, $datedue));
  $count = 0;
      $taskdetails = array();

  foreach($tasks->result() as $row)
  {

   $taskid = $row->taskid;

    $subsql = "SELECT * FROM tasks WHERE id = ?"; 
    $taskdetails[$count] = $this->db->query($subsql, array($taskid));
    $count++;
  }

  $data['taskdetails'] = $taskdetails;
  $data['total'] = $count;

  $this->header();
  $this->load->view('dashboard', $data);

Просмотр:

    <?php 

 foreach($taskdetails as $entry)
   {
  foreach($entry->result() as $row)
  {
   echo $row->name;
  }

   }

?>

Любая помощь была бы хороша, спасибо.

Ответы [ 2 ]

5 голосов
/ 27 января 2011

Причина, по которой ваш вид не отображает что-то, заключается в том, что ваш запрос не совсем корректен.

 $datedue = 2011-01-27;

следует заключать в кавычки, поскольку дата является строкой.

 $datedue = "2011-01-27";

Кроме того, вы не правильно следуете концепции MVC. Все запросы к базе данных и результаты должны происходить внутри модели. И вся обработка данных внутри контроллера.

Контроллер и представление не должны обрабатывать какие-либо соединения с базой данных, что является обязанностью модели. Поэтому я бы посоветовал создать модель и поместить все запросы к базе данных в одну или две функции. Контроллер затем вызовет эти функции и получит данные обратно. Затем он должен манипулировать им и передавать его в представление в чистом виде (это означает, что представление никогда не должно вызывать result()

Вот как ваш код должен быть структурирован:

CONTROLLER

class Tasks extends Controller {

function Tasks ()
{
    parent::Controller();   
    $this->load->model('tasks_model');
    $this->load->database();
}

function index()
{
  $datedue = "2011-01-27";
  $username = $this->tank_auth->get_username();

  $tasks = $this->tasks_model->getTasks($username, $datedue);


  $count = count($tasks);


  $data['taskdetails'] = $tasks;
  $data['total'] = $count;

   $this->header();
  $this->load->view('dashboard', $data);
}
}

MODEL

class Tasks_model extends Model {


    function Tasks_model()
    {
        // Call the Model constructor
        parent::Model();
    }

    function getTasks($username, $datedue) {
        $sql = "SELECT taskid FROM relationships WHERE username = ? AND datedue = ?"; 
        $tasks = $this->db->query($sql, array($username, $datedue));

        $taskdetails = array();

        foreach($tasks->result() as $row){

            $taskid = $row->taskid;

            array_push( $taskdetails, $this->getTasksDetails( $taskid ) );
        }

        return $taskdetails;
    }

    function getTasksDetails($taskid) {

        $subsql = "SELECT * FROM tasks WHERE id = ?"; 
        $taskdetails = $this->db->query($subsql, array($taskid));

        return $taskdetails->row();


    }


}

ВИД:

   foreach($taskdetails as $task)
   {
     echo $task->name;
   }
0 голосов
/ 27 января 2011

убедитесь, что ваша таблица задач содержит поле имени

view

 foreach($taskdetails as $entry)
{
   foreach($entry->result() as $row)
   {
       echo $row[0];
   }

}

почему вы передаете массив в этой строке

$ taskdetails [$ count] = $ this-> db-> query ($ subsql, array ($ taskid));

вместо этого напишите

$ taskdetails [$count] = $ this-> db-> query ($ subsql, $ taskid);

...