首页 > 解决方案 > 如何使用连接表在 Codeigniter 中进行分页?(CI_DB_mysqli_result 类的对象无法转换为字符串)

问题描述

我正在尝试显示来自 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

希望你能解决这个问题,谢谢

标签: phppaginationbootstrap-4codeigniter-3

解决方案


根据您对分页代码的更改。$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(); 

推荐阅读