library/Garp/Model/Behavior/Bindable.php
protected function _combineResultsWithBindings(Garp_Model $model, $data) {
        if (!$data) {
            return;
        }
        $tableName = $model->getName();
        $bindings = $model->getBindings();
        if (empty($bindings)) {
            return;
        }
        // check if it's a rowset or a single row
        if (!$data instanceof Garp_Db_Table_Rowset) {
            $data = array($data);
        }
        foreach ($bindings as $binding => $bindOptions) {
            /**
             * We keep tabs on the outer call to fetch() by checking getRecursion.
             * If it is 0, this is the first call in the chain. That way we can
             * clean up the recursion when we're done, since all subsequent fetch() calls
             * will happen within this one and the if ($cleanup) line ahead will only
             * fire on the first fetch(). Look at it like this:
             *
             * ```
             * fetch()
             *   cleanup = 1
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *   if (cleanup) resetRecursion()
             * ```
             */
            $cleanup = false;
            if (Garp_Model_Db_BindingManager::getRecursion(get_class($model), $binding) == 0) {
                $cleanup = true;
            }

            if (Garp_Model_Db_BindingManager::isAllowedFetch(get_class($model), $binding)) {
                Garp_Model_Db_BindingManager::registerFetch(get_class($model), $binding);

                foreach ($data as $datum) {
                    // There's no relation possible if the primary key is not
                    // among the fetched columns.
                    $prim = (array)$model->info(Zend_Db_Table::PRIMARY);
                    foreach ($prim as $key) {
                        try {
                            $datum->$key;
                        } catch (Exception $e) {
                            break 2;
                        }
                    }
                    $relatedRowset = $this->_getRelatedRowset($model, $datum, $bindOptions);
                    $datum->setRelated($binding, $relatedRowset);
                }
            }

            if ($cleanup) {
                Garp_Model_Db_BindingManager::resetRecursion(get_class($model), $binding);
            }
        }

        // return the pointer to 0
        if ($data instanceof Garp_Db_Table_Rowset) {
            $data->rewind();
        }
    }
protected function _combineResultsWithBindings(Garp_Model $model, $data) {
        if (!$data) {
            return;
        }
        $tableName = $model->getName();
        $bindings = $model->getBindings();
        if (empty($bindings)) {
            return;
        }
        // check if it's a rowset or a single row
        if (!$data instanceof Garp_Db_Table_Rowset) {
            $data = array($data);
        }
        foreach ($bindings as $binding => $bindOptions) {
            /**
             * We keep tabs on the outer call to fetch() by checking getRecursion.
             * If it is 0, this is the first call in the chain. That way we can
             * clean up the recursion when we're done, since all subsequent fetch() calls
             * will happen within this one and the if ($cleanup) line ahead will only
             * fire on the first fetch(). Look at it like this:
             *
             * ```
             * fetch()
             *   cleanup = 1
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *   if (cleanup) resetRecursion()
             * ```
             */
            $cleanup = false;
            if (Garp_Model_Db_BindingManager::getRecursion(get_class($model), $binding) == 0) {
                $cleanup = true;
            }

            if (Garp_Model_Db_BindingManager::isAllowedFetch(get_class($model), $binding)) {
                Garp_Model_Db_BindingManager::registerFetch(get_class($model), $binding);

                foreach ($data as $datum) {
                    // There's no relation possible if the primary key is not
                    // among the fetched columns.
                    $prim = (array)$model->info(Zend_Db_Table::PRIMARY);
                    foreach ($prim as $key) {
                        try {
                            $datum->$key;
                        } catch (Exception $e) {
                            break 2;
                        }
                    }
                    $relatedRowset = $this->_getRelatedRowset($model, $datum, $bindOptions);
                    $datum->setRelated($binding, $relatedRowset);
                }
            }

            if ($cleanup) {
                Garp_Model_Db_BindingManager::resetRecursion(get_class($model), $binding);
            }
        }

        // return the pointer to 0
        if ($data instanceof Garp_Db_Table_Rowset) {
            $data->rewind();
        }
    }
protected function _combineResultsWithBindings ( Garp_Model $ model , $ data ) { if ( ! $ data ) { return ; } $ tableName = $ model -> getName ( ) ; $ bindings = $ model -> getBindings ( ) ; if ( empty ( $ bindings ) ) { return ; } // check if it's a rowset or a single row if ( ! $ data instanceof Garp_Db_Table_Rowset ) { $ data = array ( $ data ) ; } foreach ( $ bindings as $ binding => $ bindOptions ) { /**
             * We keep tabs on the outer call to fetch() by checking getRecursion.
             * If it is 0, this is the first call in the chain. That way we can
             * clean up the recursion when we're done, since all subsequent fetch() calls
             * will happen within this one and the if ($cleanup) line ahead will only
             * fire on the first fetch(). Look at it like this:
             *
             * ```
             * fetch()
             *   cleanup = 1
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *     fetch()
             *       fetch()
             *   if (cleanup) resetRecursion()
             * ```
             */ $ cleanup = false ; if ( Garp_Model_Db_BindingManager :: getRecursion ( get_class ( $ model ) , $ binding ) == 0 ) { $ cleanup = true ; } if ( Garp_Model_Db_BindingManager :: isAllowedFetch ( get_class ( $ model ) , $ binding ) ) { Garp_Model_Db_BindingManager :: registerFetch ( get_class ( $ model ) , $ binding ) ; foreach ( $ data as $ datum ) { // There's no relation possible if the primary key is not // among the fetched columns. $ prim = ( array ) $ model -> info ( Zend_Db_Table :: PRIMARY ) ; foreach ( $ prim as $ key ) { try { $ datum -> $ key ; } catch ( Exception $ e ) { break 2 ; } } $ relatedRowset = $ this -> _getRelatedRowset ( $ model , $ datum , $ bindOptions ) ; $ datum -> setRelated ( $ binding , $ relatedRowset ) ; } } if ( $ cleanup ) { Garp_Model_Db_BindingManager :: resetRecursion ( get_class ( $ model ) , $ binding ) ; } } // return the pointer to 0 if ( $ data instanceof Garp_Db_Table_Rowset ) { $ data -> rewind ( ) ; } }
Check if there are bindings to fetch related records and
start the related rowset fetching.

@param Garp_Model $model The model that spawned this data
@param Garp_Db_Table_Row|Garp_Db_Table_Rowset $data The fetched root data
@return void
Check if there are bindings to fetch related records and start the related rowset fetching .