Как выполнить пагинацию в Codeigniter с помощью таблицы соединений? (Объект класса CI_DB_mysqli_result не может быть преобразован в строку) - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь отобразить данные из 2 таблиц, продукта и категории.

Это мой контроллер (пользователь / продукт)

$data['product'] = $this->m_product->product_join()->result();
$this->load->view('templates/login_header', $data);
$this->load->view('user/product');
$this->load->view('templates/login_footer');

это моя модель(M_product / product_join)

$this->db->select("*");
$this->db->from('category');
$this->db->join('product', 'product.category = category.id');

return $this->db->get();

и просмотр (пользователь / продукт)

<?php 
  foreach ($product as $p):
    if($p->id_user == $user['id']):
  ?>
      <div class="col-lg-3">
        <img src="<?php echo base_url(); ?>assets/upload/<?php echo $p->image; ?>" class="img-thumbnail" alt="">
        <p>
          Name : <?php echo $p->name ?>
          <br>
          Date : <?php echo $p->date ?>
          <br>
          Category : <?php echo $p->name_category ?>
          <br>
          Price : $<?php echo $p->price ?>
        </p>

      </div>
  <?php endif; ?>
  <?php endforeach; ?>
  <?php echo $product['pagination']; ?>

все выполняется, но когда я пытаюсь создать нумерацию страниц и изменить свою модель следующим образом

        $this->load->library('pagination');

        $this->db->select("*");
        $this->db->from('category');
        $this->db->join('product', 'product.category = category.id');

        $query = $this->db->get();
        $config['base_url'] = base_url('index.php/user/product');
        $config['total_rows'] = $query->num_rows();
        $config['per_page'] = 3;
        $config['uri_segment'] = 3;
        $config['num_links'] = 3;

        $config['full_tag_open']   = '<ul class="pagination pagination-sm m-t-xs m-b-xs">';
        $config['full_tag_close']  = '</ul>';

        $config['first_link']      = 'First'; 
        $config['first_tag_open']  = '<li>';
        $config['first_tag_close'] = '</li>';

        $config['last_link']       = 'Last'; 
        $config['last_tag_open']   = '<li>';
        $config['last_tag_close']  = '</li>';

        $config['next_link']       = ' <i class="glyphicon glyphicon-menu-right"></i> '; 
        $config['next_tag_open']   = '<li>';
        $config['next_tag_close']  = '</li>';

        $config['prev_link']       = ' <i class="glyphicon glyphicon-menu-left"></i> '; 
        $config['prev_tag_open']   = '<li>';
        $config['prev_tag_close']  = '</li>';

        $config['cur_tag_open']    = '<li class="active"><a href="#">';
        $config['cur_tag_close']   = '</a></li>';

        $config['num_tag_open']    = '<li>';
        $config['num_tag_close']   = '</li>';

        $this->pagination->initialize($config); // Set konfigurasi paginationnya

        $page = ($this->uri->segment($config['uri_segment'])) ? $this->uri->segment($config['uri_segment']) : 0;
        $query .= " LIMIT ".$page.", ".$config['per_page'];

        $data['limit'] = $config['per_page'];
        $data['total_rows'] = $config['total_rows'];
        $data['pagination'] = $this->pagination->create_links(); // Generate link pagination nya sesuai config diatas
        $data['product'] = $query->result();

        return $data;

Возникла ошибка

Object of class CI_DB_mysqli_result could not be converted to string

Filename: models/M_product.php

И

Message: Call to a member function result() on string

Filename: C:\xampp\htdocs\olshop\application\models\M_product.php

Надеюсь, вы сможете решить эту проблему, спасибо

1 Ответ

0 голосов
/ 08 апреля 2019

В соответствии с вашими изменениями в коде для нумерации страниц.$this->db->get() дать объект в CI_DB_mysqli_result.Ниже вы объединяете строку с этим объектом, и за это вы получаете следующую проблему.

Object of class CI_DB_mysqli_result could not be converted to string

Filename: models/M_product.php

Следовательно, $query преобразуется в строку и, следовательно, $query->result(); задает вопрос ниже.

Message: Call to a member function result() on string

Filename: C:\xampp\htdocs\olshop\application\models\M_product.php

Для ваших требований вы можете использовать $this->db->get_compiled_select() для генерации запроса или выможно сначала добавить предел $this->db->limit(10,20), а затем позвонить $query->result();

Также вы можете сделать это.

Из вашего кода удалите эту строку

$query .= " LIMIT ".$page.", ".$config['per_page']

и добавьтеэто строки

$this->db->limit($page,$config['per_page']);
$query = $this->db->get(); 
...