Welcome Guest, Not a member yet? Register   Sign In
Fatal error: Cannot use object of type CI_DB_mysql_result as array
#1

[eluser]MEM[/eluser]
Fatal error: Cannot use object of type CI_DB_mysql_result as array ... on line 81.

I was having this on line 81:
Code:
if($intParentId == $arrRows[$i]['parent_id_cat']) {

I now have this:
Code:
if($intParentId == $arrRows[$i]->parent_id_cat) {

Same error occurs. Sad Any help?





Regards,
Márcio
#2

[eluser]brianw1975[/eluser]
It's not in the if or the assignment, you have to look deeper. Look at the code that is creating $arrRows
#3

[eluser]MEM[/eluser]
I believe that is the first time that I treat him as an array...

Here is the full code:

Code:
private function _parseResultTree($intParentId,&$arrRows,$intDepth,$intRunner)
     {
        
        // stop at this depth
        if($intDepth == $intRunner)
        {
            return array();
        }
    
        $arrChildren = array();

        for($i=0;$i<count($arrRows);$i++)
        {
            if($intParentId == $arrRows[$i]->parent_id_cat) {
                $arrChildren = array_merge($arrChildren,array_splice($arrRows,$i--,1));
            }
        }
    
        $intChildren = count($arrChildren);
        if($intChildren != 0)
        {
            for($i=0;$i<$intChildren;$i++)
            {
                $arrChildren[$i]['children'] = parse_into_tree($arrChildren[$i]['id_cat'],$arrRows,$intDepth,$intRunner++);
            }        
        }
    
        return $arrChildren;
    
    }


thanks a lot,
Márcio
#4

[eluser]Aken[/eluser]
Your $arrRows is an object, not an array. Either change the $arrRows into an array, or use $arrRows->$i->parent_id_cat.
#5

[eluser]MEM[/eluser]
That will not work since $i is a numeric index, and $0 or $1 or $n..., will not be properties of query returned object.


Sad

Márcio
#6

[eluser]Aken[/eluser]
Can't help you further without knowing what $arrRows looks like going into the function. The error itself is saying that you're trying to use an object as an array. So you should turn your $arrRows into an array, then use your original IF statement.
#7

[eluser]MEM[/eluser]
Thanks again.

Sorry, I thought I have post it all...

I'm not using result() or anything, I'm just using the absolutly fundamental query(). It happens that this query returns an object.

Should I grab this returned query object, and use result_array() to transform into an array, and then use this code again?

Isn't there an easy way for changing the for loop to have the same effect, but working with objects?




Here is the full code:

Code:
public function getSubCategorias($id_cat,$intDepth=2)
{    
        
    $strSQL = 'SELECT c.id_cat,c.nome_cat,c.parent_id_cat FROM categoria c';
    $arrQuery = $this->db->query($strSQL);
    return $this->_parseResultTree($id_cat,$arrQuery,$intDepth, $intRunner=0);
    
}


private function _parseResultTree($intParentId,&$arrRows,$intDepth,$intRunner)
{
        
        // stop at this depth
        if($intDepth == $intRunner)
        {
            return array();
        }
    
        $arrChildren = array();

        for($i=0;$i<count($arrRows);$i++)
        {
            if($intParentId == $arrRows[$i]->parent_id_cat) {
                $arrChildren = array_merge($arrChildren,array_splice($arrRows,$i--,1));
            }
        }
    
        $intChildren = count($arrChildren);
        if($intChildren != 0)
        {
            for($i=0;$i<$intChildren;$i++)
            {
                $arrChildren[$i]['children'] = parse_into_tree($arrChildren[$i]['id_cat'],$arrRows,$intDepth,$intRunner++);
            }        
        }
    
        return $arrChildren;
}

Please advice,
Márcio
#8

[eluser]MEM[/eluser]
I have:

1) grab the query() object.

2) Use the result_array() method:


Works.

Here the steps:
Code:
$query = $this->db->query($strSQL);
        
$arrQuery = $query->result_array();


Thanks a lot for the tip. Smile
#9

[eluser]Aken[/eluser]
Bingo Smile Cool.




Theme © iAndrew 2016 - Forum software by © MyBB