За последние 24 часа нас посетили 30518 программистов и 1812 роботов. Сейчас ищут 895 программистов ...

Вывод на страницу информации из нескольких таблиц сразу

Тема в разделе "PHP для новичков", создана пользователем smartCreate, 18 дек 2016.

  1. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    Добрый день! Работаю на Codignaiter и вчера столкнулся с проблемой которую не могу решить до сих пор.

    Мне необходимо вывести на страницу информацию сразу с 2 таблиц, но мне неудаеться реализовать это технически.

    Простой вывод (вывод с одной таблицы) я произвожу так:

    1) В модели пишу функцию которая выбирает все значения из определенной таблицы и помещает их в массив:
    PHP:
    1. function get_table(){
    2.     $query = $this->db->get("cart");
    3.     return $query->result_array();
    4. }
    2) В контроллере я принимаю массив полученный в модели, вот таким образом:
    PHP:
    1. $this->data_1['post_array'] = $this->main_model->get_table();
    3) Передаю этот массив во вьювер совой страницы, вот так:
    PHP:
    1. $this->load->view('pages/product/index', $this->data_1);
    4) на самой странице, разбираю этот массив при помощи вот такого форыча:

    PHP:
    1. <?php foreach ($post_array as $cart):?>
    2.         <?=$cart['img']?>
    3.         <?=$cart['articul']?>
    4.         // и т.д.
    5. <?php endforeach?>  

    А вот как реализовать по этой же схеме вывод из 2 таблиц я разобраться не могу(

    Делаю так:

    1) создаю вторую функцию в модели которая делает выборку из второй таблицы:
    PHP:
    1. function get_feedback(){
    2.       $query = $this->db->get("feedback");
    3.       return $query->result_array();
    4. }
    2) Принимаю массив из этой функции в контроллере:
    PHP:
    1. $this->data_2['feedback_array'] = $this->main_model->get_feedback();
    3) Передаю этот (второй) массив во вьювер совой страницы, вот так:
    PHP:
    1. $this->load->view('pages/product/index', $this->data_1, $this->data_2);
    4) на самой странице, разбираю этот массив при помощи вот такого форыча, как и предыдущий:

    PHP:
    1. <?php foreach ($feedback_array as $feedbackt):?>
    2.         <?=$feedback['name']?>
    3.         <?=$feedback['email']?>
    4.         // и т.д.
    5. <?php endforeach?>  
    Но желаемого результат это не приносит, второй форыч не работает, хотя если не передавать первый во вьювер, то работать будет, то есть вот так:

    1) случай первый:
    PHP:
    1. $this->load->view('pages/product/index', $this->data_1/*, $this->data_2*/); //на страницу выводится информация из первой таблицы
    2) случай второй:
    PHP:
    1. $this->load->view('pages/product/index', /*$this->data_1, */$this->data_2); //на страницу выводится информация из второй таблицы таблицы
    3) случай третий:
    PHP:
    1. $this->load->view('pages/product/index', $this->data_1, $this->data_2); //на страницу выводится информация только из первой таблицы, если data_1 и data_2 поменять местами, то будет выводиться только вторая таблица
    Из всего выше сказанного я сделал вывод что все работает правильно кроме последнего 3-го пункта где я передаю массивы во вьювер, то есть здесь:
    PHP:
    1. $this->load->view('pages/product/index', $this->data_1, $this->data_2);
    Понимаю что скорее всего вот это "$this->data_1, $this->data_2" нужно записать как-то по другому, но как именно я не могу разобраться уже второй день. Прочитал кажется всю документацию по кодигнайтеру, и методу "join" но не нашел нечего что было бы применимо к моему случаю. Прошу помочь разобраться, казалось бы мелочная проблема, а голова уже пухнет(

    Заранее благодарен
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    чувак запихни всё в один массив
    PHP:
    1. $this->data_1['array']['0'] = $this->main_model->get_table();
    2. $this->data_1['array']['1'] = $this->main_model->get_feedback();
    --- Добавлено ---
    это метод
    $this->load->view()
    принимает два аргумента, а ты пытаешься передать три
     
  4. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    @machetero, последовал вашему совету и сделал так:

    PHP:
    1.  
    2. function __construct() {
    3.         parent::__construct();
    4.        
    5.         $this->load->model('main_model');
    6.         $this->load->library('email');
    7.         $this->load->dbforge();
    8.         $this->data['post_array']['0'] = $this->main_model->get_table();
    9.         $this->data['post_array']['1'] = $this->main_model->get_feedback();
    10.     }
    11.  
    12.     function load_product() {
    13.         $this->load->view('pages/product/index', $this->data);
    14.     }
    И кажись прокатило, но частично. Я получил целую кучу ошибок на странице, в местах где должна выводиться необходимая информация. Хотя ранее у меня была всего одна: "Message: Undefined variable: post_array", то есть имя массива "post_array" было не известно, то есть не передавалось из контроллера.
    Сейчас же я получаю вместо одной этой ошибки, множество вот таких: "Message: Undefined index: name", name - это значение которое храниться в массиве и несет в себе информацию из таблицы, таких сообщений у меня ровно столько же сколько и строк в таблицах. От сюда вывод - благодаря Вашему совету, оба массива с данными из разных таблиц были переданы во вьювер, но возникла новая проблема, форыч который ранее успешно разбирал массив, сейчас очевидно работает не корректно, выглядит он следующим образом:

    PHP:
    1. <?php foreach ($post_array as $feedback):?> // feedback - это имя таблицы
    2.         <?=$feedback['name']?>
    3.         <?=$feedback['email']?>
    4.         // и т.д.
    5. <?php endforeach?>
    Предполагаю что теперь проблема заключается именно в форыче. Подскажите пожалуйста что с ним стало не так??
     
  5. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    PHP:
    1. <?php $feedback = $post_array[1];
    2. foreach ($feedback as $val): ?> //
    3.         <?= $val['name'] ?>
    4.         <?= $val['email'] ?>
    5. <?php endforeach; ?>
    6. <?php $table = $post_array[0];
    7. foreach($table as $v): ?>
    8. <?php //делаем что-то с $table ?>
    9. <?php endforeach; ?>
     
    smartCreate нравится это.
  6. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    122
    Симпатии:
    4
    @machetero, Прошу прощения за задержавшуюся благодарность) Все работает, очень помог, спасибо большое:)