php - 如何使用连接表在 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
希望你能解决这个问题,谢谢
解决方案
根据您对分页代码的更改。$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();
推荐阅读
- maven - 是否有在 bazel 中调用 maven 插件的迁移路径?
- java - 如何将凭据(在登录对话框提示中输入的用户)调用到我的主目录并用 Java 打印?
- json - 如何使用自定义对象名称解析 JSON 数据?
- dart - 我如何接收未来值作为字符串
- c# - 将 ExpandoObject 转换为 T 的 AnonymousType
- php - 当我使用全新安装的 IIS 10 访问我的默认网站时,它会将我重定向到“http://localhost/installation/index.php”。为什么?
- javascript - ECharts - 将两种不同的颜色应用于同一轴上的标签
- css - 防止容器的高度随着我们添加记录而增加
- ios - 配置文件包括更新版本的签名证书
- linkedin - 通过 LinkedIn API 缩小发布图像