codeigniter递归模型函数返回空白但在正确显示模型时打印它

时间:2013-12-17 15:28:00

标签: recursion codeigniter-2

codeigniter递归模型函数返回空白但在正确显示的模型中打印时

这是我的代码,

for controller

  

$ commision_arr = $这 - > billing_model-> root_commision($ category_manager [ 'ID']);

并在模型中

  

public function root_commision($ id)
   {

   $sql="SELECT * FROM tbl_mst_category WHERE id  = '".$id."'"; 
   $query = $this->db->query($sql);
   $row=$query->row_array();
   if($row['parent']!=0)
   {
      $this->root_commision($row['parent']);
   }
   else       
      return  $row;   
     

}

2 个答案:

答案 0 :(得分:0)

递归很棘手吧?

我认为问题是你只返回最深层元素的id,但是没有将它返回给调用方法 - 所以它只适用于调用父id的情况。我无法测试下面的代码,但它应该指向正确的方向。 NB,它将行作为对象返回,而不是像代码那样返回数组。

在更多的学术说明中,如果表格很大,那么为这些类别中的每一个预先计算这些根ID可能会更好。它会使查询更快 - 递归并不快。看看transitive closures

public function root_commision($id,$root_found = FALSE)
{

    // returns FALSE if the id is not found, or the parent row.
    $query = $this->db->get_where('tbl_mst_category', array('id' => $id));
    if ($query->num_rows() > 0 )
    {
        $row = $query->first_row();
        if (($row->parent ) != 0 )
        {
            return $this->root_commision($row_id);
        }
        else
        {
            return $row;
        }
    }
    else
    {
        return FALSE;
    }
}

答案 1 :(得分:0)

  

你必须在通话时间返回功能,然后才能得到   递归函数的值只是在函数调用之前添加“return”关键字。

public function root_commision($id)
{

   $sql="SELECT * FROM tbl_mst_category WHERE id  = '".$id."'"; 
   $query = $this->db->query($sql);
   $row=$query->row_array();
   if($row['parent']!=0)
   {
      return $this->root_commision($row['parent']);
   }
   else       
      return  $row;   

}