Php Codeigniter框架中类别内的子类别
我想在主类别中显示子类别。我的桌子看起来像。但是当我打印r($cat\u id)时,它只返回类别的最后一个id。我怎样才能解决这个问题?这是我的控制器:Php Codeigniter框架中类别内的子类别,php,codeigniter,Php,Codeigniter,我想在主类别中显示子类别。我的桌子看起来像。但是当我打印r($cat\u id)时,它只返回类别的最后一个id。我怎样才能解决这个问题?这是我的控制器: $data['categories'] = $this->courses_model->get_all_categories_for_courses(); foreach($data['categories'] as $ct){ $cat_id = $ct[
$data['categories'] = $this->courses_model->get_all_categories_for_courses();
foreach($data['categories'] as $ct){
$cat_id = $ct['id'];
}
$data['subcategories'] = $this->courses_model->get_all_subcategories_for_courses($cat_id);
$this->load->view('templates/header');
$this->load->view('courses/courses-grid-fullwidth', $data);
$this->load->view('templates/footer');
}
这是我的模型:
public function get_all_categories_for_courses() {
$query = $this->db->get_where('categories', array('parent_id' => NULL));
return $query->result_array();
}
function get_all_subcategories_for_courses($cat_id) {
$query = $this->db->get_where('categories', array('parent_id' => $cat_id));
return $query->result_array();
}
这是我的查看页面:
<?php foreach($categories as $cat): ?>
<div class="col-md-3 col-sm-6 incat">
<h4>
<a href="#" class="catname"><i class="fa <?= $cat['icon']; ?>" aria-hidden="true"></i>
<?= $cat['name_rus']; ?></a>
</h4>
<ul>
<?php foreach($subcategories as $subcat): ?>
<li><a href="#"><?= $subcat['name_rus']; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<?php endforeach; ?>
提前谢谢 正如Ukasysah在对您的问题的评论中所说,每次循环浏览类别时,您都会覆盖
$cat\u id
值
您需要做的是使用ID填充一个数组,并使用$this->db->where_in()
匹配数组而不是单个值
您的控制器需要看起来更像这样:
$data['categories'] = $this->courses_model->get_all_categories_for_courses();
$cat_ids = [];
foreach($data['categories'] as $ct){
$cat_ids[] = $ct['id'];
}
$data['subcategories'] = $this->courses_model->get_all_subcategories_for_courses($cat_ids);
$this->load->view('templates/header');
$this->load->view('courses/courses-grid-fullwidth', $data);
$this->load->view('templates/footer');
function get_all_subcategories_for_courses($cat_ids) {
$query = $this->db->where_in('parent_id', $cat_ids)->get('categories');
return $query->result_array();
}
虽然您需要更改模型函数,使其如下所示:
$data['categories'] = $this->courses_model->get_all_categories_for_courses();
$cat_ids = [];
foreach($data['categories'] as $ct){
$cat_ids[] = $ct['id'];
}
$data['subcategories'] = $this->courses_model->get_all_subcategories_for_courses($cat_ids);
$this->load->view('templates/header');
$this->load->view('courses/courses-grid-fullwidth', $data);
$this->load->view('templates/footer');
function get_all_subcategories_for_courses($cat_ids) {
$query = $this->db->where_in('parent_id', $cat_ids)->get('categories');
return $query->result_array();
}
祝你好运。或者你可以这样做
<?php foreach($categories as $cat): ?>
<div class="col-md-3 col-sm-6 incat">
<h4>
<a href="<?= site_url('/courses/category/'.$cat['category_slug']); ?>" class="catname"><i class="fa <?= $cat['icon']; ?>" aria-hidden="true"></i>
<?= $cat['name_rus']; ?></a>
</h4>
<ul>
<?php
$query = $this->db->get_where('categories', array('parent_id' => $cat['id']));
?>
<?php foreach($query->result() as $subcat): ?>
<li><a href="<?= site_url('/courses/category/'.$subcat->category_slug); ?>"><?= $subcat->name_rus; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<?php endforeach; ?>
原因$cat_id
内部循环始终替换为下一个值,因此它只存储最后一个值。但是,通常最好将数据库查询之类的内容放入控制器和模型中,而不是视图中。它不仅更干净,而且对缓存也更好。@AndrewGould尽管我也尝试过,但它并没有正常工作。如何修复?遇到PHP错误严重性:注意消息:尝试获取非对象文件名的属性:models/courses\u model.PHP行号:34 Backtrace: