Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter框架中类别内的子类别_Php_Codeigniter - Fatal编程技术网

Php Codeigniter框架中类别内的子类别

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[

我想在主类别中显示子类别。我的桌子看起来像。但是当我打印r($cat\u id)时,它只返回类别的最后一个id。我怎样才能解决这个问题?这是我的控制器:

$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: