function _findFeed(&$Model, $state, $query, $results = array()) { if ($state == 'before') { if (!isset($query['feed'])) { return $query; } $DboMysql = Connectionmanager::getDataSource($Model->useDbConfig); $sql = ''; foreach ((array) $query['feed'] as $key => $feed) { $feed = array_merge($this->basicStatement, $feed); $sql .= ' UNION '; $currentModel = ClassRegistry::init($key); $setup = explode(' AND ', str_replace(array('=', '`'), array('AS', '\''), $DboMysql->conditions(array_flip($feed['setup']), false, false))); $sql .= $DboMysql->renderStatement('select', array('fields' => implode(', ', array_merge($DboMysql->fields($currentModel, null, (array) $feed['fields']), $setup)), 'table' => $DboMysql->fullTableName($currentModel), 'alias' => $currentModel->alias, 'joins' => '', 'conditions' => $DboMysql->conditions($feed['conditions']), 'group' => '', 'order' => $DboMysql->order($feed['order']), 'limit' => $DboMysql->limit($feed['limit']))); } $query = array_merge($this->basicStatement, $query); $setup = explode(' AND ', str_replace(array('=', '`'), array('AS', '\''), $DboMysql->conditions(array_flip($query['setup']), false, false))); $sql = $DboMysql->renderStatement('select', array('fields' => implode(', ', array_merge($DboMysql->fields($Model, null, (array) $query['fields']), $setup)), 'table' => $DboMysql->fullTableName($Model), 'alias' => $Model->alias, 'joins' => '', 'conditions' => $DboMysql->conditions($query['conditions']), 'group' => $sql, 'order' => $DboMysql->order($query['order']), 'limit' => $DboMysql->limit($query['limit']))); $_results = $Model->query($sql); foreach ($_results as $res) { $this->_results[]['Feed'] = $res[0]; } return $query; } elseif ($state == 'after') { return $this->_results; } return false; }
/** * Initializes the fixture * */ public function init($db) { $plugin = $this->plugin ? $this->plugin . '.' : null; App::uses($this->document, $plugin . 'Model'); $documentClass = $this->document; $documentClass::$useDbConfig = Connectionmanager::getSourceName($db); }