protected function _where($query)
    {
        $link = null;
        $type_check = true;

        if ($query instanceof AnConfig) {
            $type_check = false;
            $query = $query->query;
        }

        $description = $query->getRepository()->getDescription();
        $clauses = array();
        if ($description->getInheritanceColumn() && $type_check) {
            $resource = $description->getInheritanceColumn()->resource->getAlias();
            //the table type column name
            $type_column_name = $resource.'.'.$description->getInheritanceColumn()->name;

            $scopes = AnConfig::unbox($query->instance_of);
            if (empty($scopes)) {
                $scopes = array($description);
            } else {
                if (!is_array($scopes)) {
                    $scopes = array($scopes);
                }
            }

            foreach ($scopes as $index => $scope) {
                $inheritance_type = $this->_inheritanceTree($scope);
                if (!empty($inheritance_type) && $inheritance_type != '%') {
                    $operator = substr($inheritance_type, -1) == '%' ? 'LIKE' : '=';
                    $scopes[$index] = $type_column_name.' '.$operator.' \''.$inheritance_type.'\'';
                } else {
                    unset($scopes[$index]);
                }
            }
            if (!empty($scopes)) {
                $clauses[] = '('.implode(' OR ', $scopes).')';
            }
        }

        if (!empty($query->where)) {
            $clause = '';
            foreach ($query->where as $where) {
                $clause .= $this->_buildWhere($query, $where);
            }
            if (!empty($clause)) {
                $clauses[] = '('.$clause.')';
            }
        }

        foreach ($query->link as $link) {
            $clauses = array_merge($clauses, $this->_where($link));
        }

        return $clauses;
    }
protected function _where($query)
    {
        $link = null;
        $type_check = true;

        if ($query instanceof AnConfig) {
            $type_check = false;
            $query = $query->query;
        }

        $description = $query->getRepository()->getDescription();
        $clauses = array();
        if ($description->getInheritanceColumn() && $type_check) {
            $resource = $description->getInheritanceColumn()->resource->getAlias();
            //the table type column name
            $type_column_name = $resource.'.'.$description->getInheritanceColumn()->name;

            $scopes = AnConfig::unbox($query->instance_of);
            if (empty($scopes)) {
                $scopes = array($description);
            } else {
                if (!is_array($scopes)) {
                    $scopes = array($scopes);
                }
            }

            foreach ($scopes as $index => $scope) {
                $inheritance_type = $this->_inheritanceTree($scope);
                if (!empty($inheritance_type) && $inheritance_type != '%') {
                    $operator = substr($inheritance_type, -1) == '%' ? 'LIKE' : '=';
                    $scopes[$index] = $type_column_name.' '.$operator.' \''.$inheritance_type.'\'';
                } else {
                    unset($scopes[$index]);
                }
            }
            if (!empty($scopes)) {
                $clauses[] = '('.implode(' OR ', $scopes).')';
            }
        }

        if (!empty($query->where)) {
            $clause = '';
            foreach ($query->where as $where) {
                $clause .= $this->_buildWhere($query, $where);
            }
            if (!empty($clause)) {
                $clauses[] = '('.$clause.')';
            }
        }

        foreach ($query->link as $link) {
            $clauses = array_merge($clauses, $this->_where($link));
        }

        return $clauses;
    }
protected function _where ( $ query ) { $ link = null ; $ type_check = true ; if ( $ query instanceof AnConfig ) { $ type_check = false ; $ query = $ query -> query ; } $ description = $ query -> getRepository ( ) -> getDescription ( ) ; $ clauses = array ( ) ; if ( $ description -> getInheritanceColumn ( ) && $ type_check ) { $ resource = $ description -> getInheritanceColumn ( ) -> resource -> getAlias ( ) ; //the table type column name $ type_column_name = $ resource . '.' . $ description -> getInheritanceColumn ( ) -> name ; $ scopes = AnConfig :: unbox ( $ query -> instance_of ) ; if ( empty ( $ scopes ) ) { $ scopes = array ( $ description ) ; } else { if ( ! is_array ( $ scopes ) ) { $ scopes = array ( $ scopes ) ; } } foreach ( $ scopes as $ index => $ scope ) { $ inheritance_type = $ this -> _inheritanceTree ( $ scope ) ; if ( ! empty ( $ inheritance_type ) && $ inheritance_type != '%' ) { $ operator = substr ( $ inheritance_type , - 1 ) == '%' ? 'LIKE' : '=' ; $ scopes [ $ index ] = $ type_column_name . ' ' . $ operator . ' \'' . $ inheritance_type . '\'' ; } else { unset ( $ scopes [ $ index ] ) ; } } if ( ! empty ( $ scopes ) ) { $ clauses [ ] = '(' . implode ( ' OR ' , $ scopes ) . ')' ; } } if ( ! empty ( $ query -> where ) ) { $ clause = '' ; foreach ( $ query -> where as $ where ) { $ clause .= $ this -> _buildWhere ( $ query , $ where ) ; } if ( ! empty ( $ clause ) ) { $ clauses [ ] = '(' . $ clause . ')' ; } } foreach ( $ query -> link as $ link ) { $ clauses = array_merge ( $ clauses , $ this -> _where ( $ link ) ) ; } return $ clauses ; }
Builds Query where clauses recursively.

@return array
Builds Query where clauses recursively .