Как разбить на страницы в Codeigniter с таблицей соединений? (Объект класса CI_DB_mysqli_result не может быть преобразован в строку)

#php #pagination #bootstrap-4 #codeigniter-3

#php #разбивка на страницы #bootstrap-4 #codeigniter-3

Вопрос:

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

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

 $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:xampphtdocsolshopapplicationmodelsM_product.php
  

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

Комментарии:

1. Я исправил ошибку, но не использовал конструктор запросов codeigniter $query = "SELECT * FROM product join category on product.category = category.id"; Спасибо

Ответ №1:

Согласно вашим изменениям в коде для разбивки на страницы. $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:xampphtdocsolshopapplicationmodelsM_product.php
  

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

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

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

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

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

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

Комментарии:

1. Куда я могу поместить $this->db->get_compiled_select() ? Когда я изменяю $this->db->get() это, результат Message: Call to a member function num_rows() on string

2. Из вашего кода, пожалуйста, удалите эту строку $query .= " LIMIT ".$page.", ".$config['per_page'] и добавьте эти строки $this->db->limit($page,$config['per_page']); $query = $this->db->get();