For 循环问题在 Codeigniter 4 中迭代一次

For Loop Problem Iterate Once in Codeigniter 4

我想知道我的代码是如何迭代一次的。它应该5次迭代。但是当我删除 return $result 时,它在视图中显示错误 Invalid argument supplied for foreach() 。我一直在尝试在 Model 中添加输出代码并删除 View 中的所有代码。最后它显示了我想要的 5 次迭代。但是,如何在视图中显示结果?

我的模型

public function getAllItem()
    {
        for($i=1; $i<=5; $i++){
            for($j=$i+1; $j<=5; $j++){
                $builder = $this->db->table('rating')
                            ->select('user.idUser, user.nmUser, rating.idBengkel,
                                    MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
                                    MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
                            ->join('user','user.idUser = rating.idUser', 'left')
                            ->where('rating.idBengkel', $i)
                            ->orWhere('rating.idBengkel', $j)
                            ->groupBy('rating.idUser');
                //var_dump($builder);
                
                $query = $builder->get();
                $result = $query->getResult();

                return $result;
}

我的控制器

public function pcc_method()
    { 
        $model = new Admin_model();
        $data['all'] = $model->getAllItem();

        echo view('templates/header', $data);
        echo view('pcc_method',$data);
        echo view('templates/footer');
    }

我的看法

<table class="table table-bordered">
        <thead class="thead-dark">
          <tr>
            <th scope="col">idUser</th>
            <th scope="col">nmUser</th>
            <th scope="col">itemX</th>
            <th scope="col">itemY</th>
          </tr>
        </thead>
        <tbody>
          <!-- Looping select db from Admin.php --> 

          <?php foreach($all as $row):?>
            <tr>
              <td><?= $row->idUser;?></td>
              <td><?= $row->nmUser;?></td>
              <td class="text-center col-sm-3"><?= $row->itemX;?></td>
              <td class="text-center col-sm-3"><?= $row->itemY;?></td>
            </tr>
          <?php endforeach;?>
        </tbody>
      </table>

请给我这个问题的解决方案。 问候!

这与 codeigniter 无关。它与原生 PHP.

有关

return 停止整个方法的执行,并且 return 将指示这样做的任何数据发送到调用您的方法的任何函数或方法。

如果你需要循环到运行 5次和return 5次迭代的输出,你需要将数据存储在一个辅助变量中然后return那个变量之后for 循环停止。

这里有很多选择。最简单的方法是在第一个循环开始之前创建一个新的 arrayObject ($temp = new ArrayObject();),然后替换:

return $result

对于:

$temp->append($result);

这会将每次迭代的输出存储在临时对象中。

然后,在两个循环之外:

return $temp;

并且模型将return整个输出到控制器

很抱歉回答这个问题,因为问题在VIEW,我已经问过我的朋友,他给出了很好的解决方案。就像 @Javier Larroulet 所说的那样,数组必须存储到新声明的 Array 中。在我的代码中,我使用 $all[] 存储数组 $result

型号

public function getAllItem()
    {
        for($i=1; $i<=5; $i++){
            for($j=$i+1; $j<=5; $j++){
                $builder = $this->db->table('rating')
                            ->select('user.idUser, user.nmUser, rating.idBengkel,
                                    MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
                                    MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
                            ->join('user','user.idUser = rating.idUser', 'left')
                            ->where('rating.idBengkel', $i)
                            ->orWhere('rating.idBengkel', $j)
                            ->groupBy('rating.idUser');
                //var_dump($builder);
                
                $query = $builder->get();
                $result = $query->getResult();
                $all[] = $result;
             }
         }
                return $all;
}



在 View 中,我正在检查 <?php echo $all[0][0]->idUser;?> 以显示结果,我明白了。然后我使用 nested loop 因为那是对应的。

查看

<?php foreach($all as $row):?>
    <table class="table table-bordered">
        <thead class="thead-dark">
            <tr>
                <th scope="col">idUser</th>
                <th scope="col">nmUser</th>
                <th scope="col">itemX</th>
                <th scope="col">itemY</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($row as $key => $val):?>
                <tr>
                    <td><?= $val->idUser;?></td>
                    <td><?= $val->nmUser;?></td>
                    <td class="text-center col-sm-3"><?= $val->itemX;?></td>
                    <td class="text-center col-sm-3"><?= $val->itemY;?></td>
                </tr>           
            <?php endforeach;?>
        <?php endforeach;?>   
    </tbody>
</table>  

提前致谢!