Codeigniter: Попытка выполнить запрос в цикле в представлении - PullRequest
0 голосов
/ 30 марта 2012

У меня есть страница, на которой отображаются сообщения, и я хочу получить имя автора рядом с каждым сообщением. Существует таблица БД для страниц (со столбцом с именами title и author ) и таблицей для авторов (с столбцом с именами id и author ).

Контроль

function pages() {
  // QUERIES
  $pages_query = $this->db->get('table_pages');
  $authors_query = $this->db->get_where('table_authors', array('id =' => $row->author));

  // DATA
  $data['pages'] = $pages_query;
  $data['authors'] = $authors_query;

  // CREATE
  $this->load->view('admin_pages', $data);
}

View

    <? foreach ($pages->result() as $row): ?>
         Title: <?=$row->title?>, by <?=$authors['id']?><br />
    <? endforeach; ?>

Я думаю, что моя проблема в том, чтобы позвонить автору на основе идентификатора в контроле, но я просто не могу понять это.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

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

Вы хотите сделать что-то вроде:

function pages() {
    // QUERIES
    $this->db->join('table_authors', 'table_pages.table_authors_id = table_authors.id');
    $pages_query = $this->db->get('table_pages');

    // DATA
    $data['pages'] = $pages_query;

    // CREATE
    $this->load->view('admin_pages', $data);
}

View

<? foreach ($pages->result() as $row): ?>
     Title: <?=$row->title?>, by <?=$row->table_authors_name?><br />
<? endforeach; ?>

Возможно, вам придется настроить некоторые имена столбцов, так как я не знаю структуру вашей базы данных. Если и table_pages, и table_authors содержат поля name или title, вам придется переименовать столбцы в вашем запросе. Вы можете сделать это, используя

$this->db->select('table_authors.title AS author_name, ...');

0 голосов
/ 21 августа 2015

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

  For controller you can write like this

       function pages() {

   $pages_query = $this->db->query("SELECT * FROM table_authors as a INNER JOIN table_pages as p ON a.id=p.table_authors_id");

   // DATA
   $data['pages'] = $pages_query->result_array();


  // CREATE
  $this->load->view('admin_pages', $data); // Passing the data to the view loading function.
   }


 For Views You can write like this.

    <?php
    foreach($pages as $page):
    echo "Title: ".$page['title'].", by ".$page['table_authors_id'];
    endforeach; 
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...