Передача массива с более чем одним полем в представление в codeigniter - PullRequest
0 голосов
/ 11 февраля 2011

Я использую CodeIgniter, и я борюсь с массивами, мне нужно выполнить поиск MySQL DB в контроллере, а затем передать массив в представление, чтобы я мог перебрать массив в представлении, чтобы отобразить список Результаты. Мне нужно, чтобы массив содержал два поля в строке и ID и имя, например,

row1 ID = 1, Name = Hello ID строки2 = 2, Имя = Мир

Я искал все по сети, и я могу сделать это, просто передав ID или Name, но я не могу понять, как передать их обоих в массив.

//get open cases
        $this->db->where('UserID',$this->session->userdata('ID'));
                $query = $this->db->get('cases');
                if ($query->num_rows() > 0)
                        {
                            $cases = array();
                            foreach ($query->result() as $row)
                                    {
                                        // ive tried this
                                        $cases[]=$row->ID,$row->CaseName;
                                        // and this
                                        $cases[]=($row->ID,$row->CaseName);
                                        //but they both dont work :(
                                    }

Я могу понять базовые массивы, но никогда раньше им не приходилось использовать их, и теперь я использую CI, и я не могу просто поместить поиск sql в представление и просмотреть его там. Я знаю, что поиск sql должен быть в модели, но я не беспокоюсь об этом в данный момент, просто хочу заполнить массив и передать его представлению, любая помощь будет оценена.

// РЕДАКТИРОВАТЬ, эта функция работает нормально, но как вы предполагаете использовать CI

function viewCase()
            {
                $caseID = $this->uri->segment(3);

                $this->db->where('ID',$caseID);
                $this->db->where('UserID',  $this->session->userdata('ID'));
                $query = $this->db->get('cases');
                if ($query->num_rows() == 1)
                {
                    foreach ($query->result() as $row)
                            {
                            $data['caseID']= $row->ID;
                            $data['caseName'] = $row->CaseName;
                            $data['fileName'] = $row->FileName;
                            $data['statusID'] = $row->Status;
                            $data['statusName']= "not set yet";
                            //we need the status friendly name
                            $this->db->where('ID', $data['statusID']);
                            $query2 = $this->db->get('case_status');
                            if ($query->num_rows() == 1)
                            {
                                foreach ($query2->result() as $row2)
                                        {
                                            $data['statusName']=$row2->Name;
                                         }
                            }

                            }


                            $data['fName']= $this->session->userdata('fName');
                            $data['lName']= $this->session->userdata('lName');
                            $data['email']= $this->session->userdata('email');
                            $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
                            $this->load->view('head',$data);
                            $this->load->view('header_logged_in',$data);
                            $this->load->view('nav');
                            $this->load->view('view_case_view',$data);
                            $this->load->view('footer');
                            }

                else
                    {
                    $data['fName']= $this->session->userdata('fName');
                    $data['lName']= $this->session->userdata('lName');
                    $data['email']= $this->session->userdata('email');
                    $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
                    $this->load->view('head',$data);
                    $this->load->view('header_logged_in',$data);
                    $this->load->view('nav');
                    $this->load->view('view_case_error_view');
                    $this->load->view('footer');
                    }
            }

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Позвольте мне сделать простой макет того, как должно работать ваше приложение, если вы используете шаблон MVC, на котором основан codeigniter.

Модель:

class YourModel extends Model{
     function get_data(){
         $query = $this->db->get('cases');
         return $query->result();
     }
}

Контроллер:

class YourController exteds Controller{
     function yourFunction(){
          $this->load->model('Model_name', 'fubar');
          $data['yourinfo'] = $this->fubar->get_data();

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

Просмотр:

foreach($yourinfo as $row){
         echo $row->yourcoulmn . "<br>";
}

Это более или менее краткая версия того, что вам нужно сделать.

Надеюсь, это поможет

1 голос
/ 11 февраля 2011
foreach ($query->result() as $row)
  {
    $cases[]=array ($row->ID,$row->CaseName);
    // or $cases[] = array ('id' => $row->ID, 'name' => $row->CaseName);
  }
0 голосов
/ 11 февраля 2011

Если вам не нужно ничего делать с данными в контроллере, вы можете просто передать переменную $query в ваше представление и затем foreach ($query->result() as $row) в представлении.

// EDIT: Я бы написал ваш контроллер так. Здесь я предполагаю, что вы должны ввести этот контроллер с ID, если вы этого не сделаете, это вызовет ошибку. Ваш код сегмента URI вернул бы false, который, я думаю, будет интерпретирован как ноль в вашем запросе и вернет нулевой набор результатов. Вы можете установить 0 в качестве значения по умолчанию, например viewCase($caseID=0), если хотите.

    function viewCase($caseID)
{
    $this->db->select('cases.ID AS CaseID', FALSE); /* you will access this as $row->CaseID */
    $this->db->select('cases.CaseName');
    $this->db->select('cases.FileNameName');
    $this->db->select('cases.Status AS StatusID', FALSE); /* if you don't need status id, you can remove this, access as $row->StatusID */
    $this->db->select('case_status.Name AS StatusName', FALSE); /* access as $row->StatusName */
    $this->db->join('case_status', 'case_statis.ID=cases.Status');
    $this->db->where('cases.ID', $caseID);
    $this->db->where('cases.UserID', $this->session->userdata('ID'));
    $query = $this->db->get('cases');

    $data['query'] = $query;

    $data['fName']= $this->session->userdata('fName');
    $data['lName']= $this->session->userdata('lName');
    $data['email']= $this->session->userdata('email');
    $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');

    $this->load->view('head',$data);
    $this->load->view('header_logged_in',$data);
    $this->load->view('nav');
    $this->load->view('view_case_view',$data);
    $this->load->view('footer');
}

А потом, на ваш взгляд, сделайте что-то подобное

// view
<table>
    <tr>
        <th>CaseID</th>
        <th>CaseName</th>
        <th>FileName</th>
        <th>StatusID</th>
        <th>StatusName</th>
    </tr>
    <? foreach ($query->result() as $row): ?>
        <tr>
        <td><p><?=$row->CaseID?></p></td>
        <td><p><?=$row->CaseName?></p></td>
        <td><p><?=$row->FileName?></p></td>
        <td><p><?=$row->StatusID?></p></td>
        <td><p><?=$row->StatusName?></p></td>
        </tr>
    <? endforeach; ?>
</table>

Обратите внимание, что foreach не будет вводиться, если строк нет, поэтому вам не нужно проверять количество строк, если вы не хотите делать что-то особенное, когда ничего не возвращено (например, печать «без результата»). 1012 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...