| <?php |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| abstract class Zend_Db_Table_Row_Abstract implements ArrayAccess, IteratorAggregate |
| { |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected $_data = array(); |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected $_cleanData = array(); |
|
|
| |
| |
| |
| |
| |
| |
| protected $_modifiedFields = array(); |
|
|
| |
| |
| |
| |
| |
| protected $_table = null; |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected $_connected = true; |
|
|
| |
| |
| |
| |
| |
| |
| |
| protected $_readOnly = false; |
|
|
| |
| |
| |
| |
| |
| protected $_tableClass = null; |
|
|
| |
| |
| |
| |
| |
| protected $_primary; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function __construct(array $config = array()) |
| { |
| if (isset($config['table']) && $config['table'] instanceof Zend_Db_Table_Abstract) { |
| $this->_table = $config['table']; |
| $this->_tableClass = get_class($this->_table); |
| } elseif ($this->_tableClass !== null) { |
| $this->_table = $this->_getTableFromString($this->_tableClass); |
| } |
|
|
| if (isset($config['data'])) { |
| if (!is_array($config['data'])) { |
| |
| throw new Zend_Db_Table_Row_Exception('Data must be an array'); |
| } |
| $this->_data = $config['data']; |
| } |
| if (isset($config['stored']) && $config['stored'] === true) { |
| $this->_cleanData = $this->_data; |
| } |
|
|
| if (isset($config['readOnly']) && $config['readOnly'] === true) { |
| $this->setReadOnly(true); |
| } |
|
|
| |
| if (($table = $this->_getTable())) { |
| $info = $table->info(); |
| $this->_primary = (array) $info['primary']; |
| } |
|
|
| $this->init(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| protected function _transformColumn($columnName) |
| { |
| if (!is_string($columnName)) { |
| |
| throw new Zend_Db_Table_Row_Exception('Specified column is not a string'); |
| } |
| |
| return $columnName; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function __get($columnName) |
| { |
| $columnName = $this->_transformColumn($columnName); |
| if (!array_key_exists($columnName, $this->_data)) { |
| |
| throw new Zend_Db_Table_Row_Exception("Specified column \"$columnName\" is not in the row"); |
| } |
| return $this->_data[$columnName]; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function __set($columnName, $value) |
| { |
| $columnName = $this->_transformColumn($columnName); |
| if (!array_key_exists($columnName, $this->_data)) { |
| |
| throw new Zend_Db_Table_Row_Exception("Specified column \"$columnName\" is not in the row"); |
| } |
| $this->_data[$columnName] = $value; |
| $this->_modifiedFields[$columnName] = true; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function __unset($columnName) |
| { |
| $columnName = $this->_transformColumn($columnName); |
| if (!array_key_exists($columnName, $this->_data)) { |
| |
| throw new Zend_Db_Table_Row_Exception("Specified column \"$columnName\" is not in the row"); |
| } |
| if ($this->isConnected() && in_array($columnName, $this->_table->info('primary'))) { |
| |
| throw new Zend_Db_Table_Row_Exception("Specified column \"$columnName\" is a primary key and should not be unset"); |
| } |
| unset($this->_data[$columnName]); |
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function __isset($columnName) |
| { |
| $columnName = $this->_transformColumn($columnName); |
| return array_key_exists($columnName, $this->_data); |
| } |
|
|
| |
| |
| |
| |
| |
| public function __sleep() |
| { |
| return array('_tableClass', '_primary', '_data', '_cleanData', '_readOnly' ,'_modifiedFields'); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function __wakeup() |
| { |
| $this->_connected = false; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function offsetExists($offset) |
| { |
| return $this->__isset($offset); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function offsetGet($offset) |
| { |
| return $this->__get($offset); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function offsetSet($offset, $value) |
| { |
| $this->__set($offset, $value); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function offsetUnset($offset) |
| { |
| return $this->__unset($offset); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function init() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| public function getTable() |
| { |
| return $this->_table; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function setTable(?Zend_Db_Table_Abstract $table = null) |
| { |
| if ($table == null) { |
| $this->_table = null; |
| $this->_connected = false; |
| return false; |
| } |
|
|
| $tableClass = get_class($table); |
| if (! $table instanceof $this->_tableClass) { |
| |
| throw new Zend_Db_Table_Row_Exception("The specified Table is of class $tableClass, expecting class to be instance of $this->_tableClass"); |
| } |
|
|
| $this->_table = $table; |
| $this->_tableClass = $tableClass; |
|
|
| $info = $this->_table->info(); |
|
|
| if ($info['cols'] != array_keys($this->_data)) { |
| |
| throw new Zend_Db_Table_Row_Exception('The specified Table does not have the same columns as the Row'); |
| } |
|
|
| if (! array_intersect((array) $this->_primary, $info['primary']) == (array) $this->_primary) { |
|
|
| |
| throw new Zend_Db_Table_Row_Exception("The specified Table '$tableClass' does not have the same primary key as the Row"); |
| } |
|
|
| $this->_connected = true; |
| return true; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getTableClass() |
| { |
| return $this->_tableClass; |
| } |
|
|
| |
| |
| |
| |
| |
| public function isConnected() |
| { |
| return $this->_connected; |
| } |
|
|
| |
| |
| |
| |
| |
| public function isReadOnly() |
| { |
| return $this->_readOnly; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function setReadOnly($flag) |
| { |
| $this->_readOnly = (bool) $flag; |
| } |
|
|
| |
| |
| |
| |
| |
| public function select() |
| { |
| return $this->getTable()->select(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function save() |
| { |
| |
| |
| |
| |
| |
| if (empty($this->_cleanData)) { |
| return $this->_doInsert(); |
| } else { |
| return $this->_doUpdate(); |
| } |
| } |
|
|
| |
| |
| |
| |
| protected function _doInsert() |
| { |
| |
| |
| |
| if ($this->_readOnly === true) { |
| |
| throw new Zend_Db_Table_Row_Exception('This row has been marked read-only'); |
| } |
|
|
| |
| |
| |
| $this->_insert(); |
|
|
| |
| |
| |
| $data = array_intersect_key($this->_data, $this->_modifiedFields); |
| $primaryKey = $this->_getTable()->insert($data); |
|
|
| |
| |
| |
| |
| if (is_array($primaryKey)) { |
| $newPrimaryKey = $primaryKey; |
| } else { |
| |
| $tempPrimaryKey = (array) $this->_primary; |
| $newPrimaryKey = array(current($tempPrimaryKey) => $primaryKey); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| $this->_data = array_merge($this->_data, $newPrimaryKey); |
|
|
| |
| |
| |
| $this->_postInsert(); |
|
|
| |
| |
| |
| $this->_refresh(); |
|
|
| return $primaryKey; |
| } |
|
|
| |
| |
| |
| |
| protected function _doUpdate() |
| { |
| |
| |
| |
| if ($this->_readOnly === true) { |
| |
| throw new Zend_Db_Table_Row_Exception('This row has been marked read-only'); |
| } |
|
|
| |
| |
| |
| |
| $where = $this->_getWhereQuery(false); |
|
|
| |
| |
| |
| $this->_update(); |
|
|
| |
| |
| |
| |
| $diffData = array_intersect_key($this->_data, $this->_modifiedFields); |
|
|
| |
| |
| |
| $pkDiffData = array_intersect_key($diffData, array_flip((array)$this->_primary)); |
|
|
| |
| |
| |
| |
| if (count($pkDiffData) > 0) { |
| $depTables = $this->_getTable()->getDependentTables(); |
| if (!empty($depTables)) { |
| $pkNew = $this->_getPrimaryKey(true); |
| $pkOld = $this->_getPrimaryKey(false); |
| foreach ($depTables as $tableClass) { |
| $t = $this->_getTableFromString($tableClass); |
| $t->_cascadeUpdate($this->getTableClass(), $pkOld, $pkNew); |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| if (count($diffData) > 0) { |
| $this->_getTable()->update($diffData, $where); |
| } |
|
|
| |
| |
| |
| |
| |
| $this->_postUpdate(); |
|
|
| |
| |
| |
| |
| $this->_refresh(); |
|
|
| |
| |
| |
| |
| |
| $primaryKey = $this->_getPrimaryKey(true); |
| if (count($primaryKey) == 1) { |
| return current($primaryKey); |
| } |
|
|
| return $primaryKey; |
| } |
|
|
| |
| |
| |
| |
| |
| public function delete() |
| { |
| |
| |
| |
| if ($this->_readOnly === true) { |
| |
| throw new Zend_Db_Table_Row_Exception('This row has been marked read-only'); |
| } |
|
|
| $where = $this->_getWhereQuery(); |
|
|
| |
| |
| |
| $this->_delete(); |
|
|
| |
| |
| |
| $depTables = $this->_getTable()->getDependentTables(); |
| if (!empty($depTables)) { |
| $pk = $this->_getPrimaryKey(); |
| foreach ($depTables as $tableClass) { |
| $t = $this->_getTableFromString($tableClass); |
| $t->_cascadeDelete($this->getTableClass(), $pk); |
| } |
| } |
|
|
| |
| |
| |
| $result = $this->_getTable()->delete($where); |
|
|
| |
| |
| |
| $this->_postDelete(); |
|
|
| |
| |
| |
| $this->_data = array_combine( |
| array_keys($this->_data), |
| array_fill(0, count($this->_data), null) |
| ); |
|
|
| return $result; |
| } |
|
|
| public function getIterator() |
| { |
| return new ArrayIterator((array) $this->_data); |
| } |
|
|
| |
| |
| |
| |
| |
| public function toArray() |
| { |
| return (array)$this->_data; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function setFromArray(array $data) |
| { |
| $data = array_intersect_key($data, $this->_data); |
|
|
| foreach ($data as $columnName => $value) { |
| $this->__set($columnName, $value); |
| } |
|
|
| return $this; |
| } |
|
|
| |
| |
| |
| |
| |
| public function refresh() |
| { |
| return $this->_refresh(); |
| } |
|
|
| |
| |
| |
| |
| |
| protected function _getTable() |
| { |
| if (!$this->_connected) { |
| |
| throw new Zend_Db_Table_Row_Exception('Cannot save a Row unless it is connected'); |
| } |
| return $this->_table; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _getPrimaryKey($useDirty = true) |
| { |
| if (!is_array($this->_primary)) { |
| |
| throw new Zend_Db_Table_Row_Exception("The primary key must be set as an array"); |
| } |
|
|
| $primary = array_flip($this->_primary); |
| if ($useDirty) { |
| $array = array_intersect_key($this->_data, $primary); |
| } else { |
| $array = array_intersect_key($this->_cleanData, $primary); |
| } |
| if (count($primary) != count($array)) { |
| |
| throw new Zend_Db_Table_Row_Exception("The specified Table '$this->_tableClass' does not have the same primary key as the Row"); |
| } |
| return $array; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _getWhereQuery($useDirty = true) |
| { |
| $where = array(); |
| $db = $this->_getTable()->getAdapter(); |
| $primaryKey = $this->_getPrimaryKey($useDirty); |
| $info = $this->_getTable()->info(); |
| $metadata = $info[Zend_Db_Table_Abstract::METADATA]; |
|
|
| |
| $where = array(); |
| foreach ($primaryKey as $column => $value) { |
| $tableName = $db->quoteIdentifier($info[Zend_Db_Table_Abstract::NAME], true); |
| $type = $metadata[$column]['DATA_TYPE']; |
| $columnName = $db->quoteIdentifier($column, true); |
| $where[] = $db->quoteInto("{$tableName}.{$columnName} = ?", $value, $type); |
| } |
| return $where; |
| } |
|
|
| |
| |
| |
| |
| |
| protected function _refresh() |
| { |
| $where = $this->_getWhereQuery(); |
| $row = $this->_getTable()->fetchRow($where); |
|
|
| if (null === $row) { |
| |
| throw new Zend_Db_Table_Row_Exception('Cannot refresh row as parent is missing'); |
| } |
|
|
| $this->_data = $row->toArray(); |
| $this->_cleanData = $this->_data; |
| $this->_modifiedFields = array(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _insert() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _postInsert() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _update() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _postUpdate() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _delete() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function _postDelete() |
| { |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| protected function _prepareReference(Zend_Db_Table_Abstract $dependentTable, Zend_Db_Table_Abstract $parentTable, $ruleKey) |
| { |
| $parentTableName = (get_class($parentTable) === 'Zend_Db_Table') ? $parentTable->getDefinitionConfigName() : get_class($parentTable); |
| $map = $dependentTable->getReference($parentTableName, $ruleKey); |
|
|
| if (!isset($map[Zend_Db_Table_Abstract::REF_COLUMNS])) { |
| $parentInfo = $parentTable->info(); |
| $map[Zend_Db_Table_Abstract::REF_COLUMNS] = array_values((array) $parentInfo['primary']); |
| } |
|
|
| $map[Zend_Db_Table_Abstract::COLUMNS] = (array) $map[Zend_Db_Table_Abstract::COLUMNS]; |
| $map[Zend_Db_Table_Abstract::REF_COLUMNS] = (array) $map[Zend_Db_Table_Abstract::REF_COLUMNS]; |
|
|
| return $map; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function findDependentRowset($dependentTable, $ruleKey = null, ?Zend_Db_Table_Select $select = null) |
| { |
| $db = $this->_getTable()->getAdapter(); |
|
|
| if (is_string($dependentTable)) { |
| $dependentTable = $this->_getTableFromString($dependentTable); |
| } |
|
|
| if (!$dependentTable instanceof Zend_Db_Table_Abstract) { |
| $type = gettype($dependentTable); |
| if ($type == 'object') { |
| $type = get_class($dependentTable); |
| } |
| |
| throw new Zend_Db_Table_Row_Exception("Dependent table must be a Zend_Db_Table_Abstract, but it is $type"); |
| } |
|
|
| |
| |
| if (($tableDefinition = $this->_table->getDefinition()) !== null |
| && ($dependentTable->getDefinition() == null)) { |
| $dependentTable->setOptions(array(Zend_Db_Table_Abstract::DEFINITION => $tableDefinition)); |
| } |
|
|
| if ($select === null) { |
| $select = $dependentTable->select(); |
| } else { |
| $select->setTable($dependentTable); |
| } |
|
|
| $map = $this->_prepareReference($dependentTable, $this->_getTable(), $ruleKey); |
|
|
| for ($i = 0; $i < count($map[Zend_Db_Table_Abstract::COLUMNS]); ++$i) { |
| $parentColumnName = $db->foldCase($map[Zend_Db_Table_Abstract::REF_COLUMNS][$i]); |
| $value = $this->_data[$parentColumnName]; |
| |
| $dependentDb = $dependentTable->getAdapter(); |
| $dependentColumnName = $dependentDb->foldCase($map[Zend_Db_Table_Abstract::COLUMNS][$i]); |
| $dependentColumn = $dependentDb->quoteIdentifier($dependentColumnName, true); |
| $dependentInfo = $dependentTable->info(); |
| $type = $dependentInfo[Zend_Db_Table_Abstract::METADATA][$dependentColumnName]['DATA_TYPE']; |
| $select->where("$dependentColumn = ?", $value, $type); |
| } |
|
|
| return $dependentTable->fetchAll($select); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function findParentRow($parentTable, $ruleKey = null, Zend_Db_Table_Select $select = null) |
| { |
| $db = $this->_getTable()->getAdapter(); |
|
|
| if (is_string($parentTable)) { |
| $parentTable = $this->_getTableFromString($parentTable); |
| } |
|
|
| if (!$parentTable instanceof Zend_Db_Table_Abstract) { |
| $type = gettype($parentTable); |
| if ($type == 'object') { |
| $type = get_class($parentTable); |
| } |
| |
| throw new Zend_Db_Table_Row_Exception("Parent table must be a Zend_Db_Table_Abstract, but it is $type"); |
| } |
|
|
| |
| |
| if (($tableDefinition = $this->_table->getDefinition()) !== null |
| && ($parentTable->getDefinition() == null)) { |
| $parentTable->setOptions(array(Zend_Db_Table_Abstract::DEFINITION => $tableDefinition)); |
| } |
|
|
| if ($select === null) { |
| $select = $parentTable->select(); |
| } else { |
| $select->setTable($parentTable); |
| } |
|
|
| $map = $this->_prepareReference($this->_getTable(), $parentTable, $ruleKey); |
|
|
| |
| for ($i = 0; $i < count($map[Zend_Db_Table_Abstract::COLUMNS]); ++$i) { |
| $dependentColumnName = $db->foldCase($map[Zend_Db_Table_Abstract::COLUMNS][$i]); |
| $value = $this->_data[$dependentColumnName]; |
| |
| $parentDb = $parentTable->getAdapter(); |
| $parentColumnName = $parentDb->foldCase($map[Zend_Db_Table_Abstract::REF_COLUMNS][$i]); |
| $parentColumn = $parentDb->quoteIdentifier($parentColumnName, true); |
| $parentInfo = $parentTable->info(); |
|
|
| |
| $type = $parentInfo[Zend_Db_Table_Abstract::METADATA][$parentColumnName]['DATA_TYPE']; |
| $nullable = $parentInfo[Zend_Db_Table_Abstract::METADATA][$parentColumnName]['NULLABLE']; |
| if ($value === null && $nullable == true) { |
| $select->where("$parentColumn IS NULL"); |
| } elseif ($value === null && $nullable == false) { |
| return null; |
| } else { |
| $select->where("$parentColumn = ?", $value, $type); |
| } |
|
|
| } |
|
|
| return $parentTable->fetchRow($select); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function findManyToManyRowset($matchTable, $intersectionTable, $callerRefRule = null, |
| $matchRefRule = null, ?Zend_Db_Table_Select $select = null) |
| { |
| $db = $this->_getTable()->getAdapter(); |
|
|
| if (is_string($intersectionTable)) { |
| $intersectionTable = $this->_getTableFromString($intersectionTable); |
| } |
|
|
| if (!$intersectionTable instanceof Zend_Db_Table_Abstract) { |
| $type = gettype($intersectionTable); |
| if ($type == 'object') { |
| $type = get_class($intersectionTable); |
| } |
| |
| throw new Zend_Db_Table_Row_Exception("Intersection table must be a Zend_Db_Table_Abstract, but it is $type"); |
| } |
|
|
| |
| |
| if (($tableDefinition = $this->_table->getDefinition()) !== null |
| && ($intersectionTable->getDefinition() == null)) { |
| $intersectionTable->setOptions(array(Zend_Db_Table_Abstract::DEFINITION => $tableDefinition)); |
| } |
|
|
| if (is_string($matchTable)) { |
| $matchTable = $this->_getTableFromString($matchTable); |
| } |
|
|
| if (! $matchTable instanceof Zend_Db_Table_Abstract) { |
| $type = gettype($matchTable); |
| if ($type == 'object') { |
| $type = get_class($matchTable); |
| } |
| |
| throw new Zend_Db_Table_Row_Exception("Match table must be a Zend_Db_Table_Abstract, but it is $type"); |
| } |
|
|
| |
| |
| if (($tableDefinition = $this->_table->getDefinition()) !== null |
| && ($matchTable->getDefinition() == null)) { |
| $matchTable->setOptions(array(Zend_Db_Table_Abstract::DEFINITION => $tableDefinition)); |
| } |
|
|
| if ($select === null) { |
| $select = $matchTable->select(); |
| } else { |
| $select->setTable($matchTable); |
| } |
|
|
| |
| $interInfo = $intersectionTable->info(); |
| $interDb = $intersectionTable->getAdapter(); |
| $interName = $interInfo['name']; |
| $interSchema = isset($interInfo['schema']) ? $interInfo['schema'] : null; |
| $matchInfo = $matchTable->info(); |
| $matchName = $matchInfo['name']; |
| $matchSchema = isset($matchInfo['schema']) ? $matchInfo['schema'] : null; |
|
|
| $matchMap = $this->_prepareReference($intersectionTable, $matchTable, $matchRefRule); |
|
|
| for ($i = 0; $i < count($matchMap[Zend_Db_Table_Abstract::COLUMNS]); ++$i) { |
| $interCol = $interDb->quoteIdentifier('i' . '.' . $matchMap[Zend_Db_Table_Abstract::COLUMNS][$i], true); |
| $matchCol = $interDb->quoteIdentifier('m' . '.' . $matchMap[Zend_Db_Table_Abstract::REF_COLUMNS][$i], true); |
| $joinCond[] = "$interCol = $matchCol"; |
| } |
| $joinCond = implode(' AND ', $joinCond); |
|
|
| $select->from(array('i' => $interName), array(), $interSchema) |
| ->joinInner(array('m' => $matchName), $joinCond, Zend_Db_Select::SQL_WILDCARD, $matchSchema) |
| ->setIntegrityCheck(false); |
|
|
| $callerMap = $this->_prepareReference($intersectionTable, $this->_getTable(), $callerRefRule); |
|
|
| for ($i = 0; $i < count($callerMap[Zend_Db_Table_Abstract::COLUMNS]); ++$i) { |
| $callerColumnName = $db->foldCase($callerMap[Zend_Db_Table_Abstract::REF_COLUMNS][$i]); |
| $value = $this->_data[$callerColumnName]; |
| $interColumnName = $interDb->foldCase($callerMap[Zend_Db_Table_Abstract::COLUMNS][$i]); |
| $interCol = $interDb->quoteIdentifier("i.$interColumnName", true); |
| $interInfo = $intersectionTable->info(); |
| $type = $interInfo[Zend_Db_Table_Abstract::METADATA][$interColumnName]['DATA_TYPE']; |
| $select->where($interDb->quoteInto("$interCol = ?", $value, $type)); |
| } |
|
|
| $stmt = $select->query(); |
|
|
| $config = array( |
| 'table' => $matchTable, |
| 'data' => $stmt->fetchAll(Zend_Db::FETCH_ASSOC), |
| 'rowClass' => $matchTable->getRowClass(), |
| 'readOnly' => false, |
| 'stored' => true |
| ); |
|
|
| $rowsetClass = $matchTable->getRowsetClass(); |
| if (!class_exists($rowsetClass)) { |
| try { |
| |
| Zend_Loader::loadClass($rowsetClass); |
| } catch (Zend_Exception $e) { |
| |
| throw new Zend_Db_Table_Row_Exception($e->getMessage(), $e->getCode(), $e); |
| } |
| } |
| $rowset = new $rowsetClass($config); |
| return $rowset; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function __call($method, array $args) |
| { |
| $matches = array(); |
|
|
| if (count($args) && $args[0] instanceof Zend_Db_Table_Select) { |
| $select = $args[0]; |
| } else { |
| $select = null; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| if (preg_match('/^findParent(\w+?)(?:By(\w+))?$/', $method, $matches)) { |
| $class = $matches[1]; |
| $ruleKey1 = isset($matches[2]) ? $matches[2] : null; |
| return $this->findParentRow($class, $ruleKey1, $select); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| if (preg_match('/^find(\w+?)Via(\w+?)(?:By(\w+?)(?:And(\w+))?)?$/', $method, $matches)) { |
| $class = $matches[1]; |
| $viaClass = $matches[2]; |
| $ruleKey1 = isset($matches[3]) ? $matches[3] : null; |
| $ruleKey2 = isset($matches[4]) ? $matches[4] : null; |
| return $this->findManyToManyRowset($class, $viaClass, $ruleKey1, $ruleKey2, $select); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| if (preg_match('/^find(\w+?)(?:By(\w+))?$/', $method, $matches)) { |
| $class = $matches[1]; |
| $ruleKey1 = isset($matches[2]) ? $matches[2] : null; |
| return $this->findDependentRowset($class, $ruleKey1, $select); |
| } |
|
|
| |
| throw new Zend_Db_Table_Row_Exception("Unrecognized method '$method()'"); |
| } |
|
|
|
|
| |
| |
| |
| |
| |
| |
| protected function _getTableFromString($tableName) |
| { |
|
|
| if ($this->_table instanceof Zend_Db_Table_Abstract) { |
| $tableDefinition = $this->_table->getDefinition(); |
|
|
| if ($tableDefinition !== null && $tableDefinition->hasTableConfig($tableName)) { |
| return new Zend_Db_Table($tableName, $tableDefinition); |
| } |
| } |
|
|
| |
| if (!class_exists($tableName)) { |
| try { |
| |
| Zend_Loader::loadClass($tableName); |
| } catch (Zend_Exception $e) { |
| |
| throw new Zend_Db_Table_Row_Exception($e->getMessage(), $e->getCode(), $e); |
| } |
| } |
|
|
| $options = array(); |
|
|
| if (($table = $this->_getTable())) { |
| $options['db'] = $table->getAdapter(); |
| } |
|
|
| if (isset($tableDefinition) && $tableDefinition !== null) { |
| $options[Zend_Db_Table_Abstract::DEFINITION] = $tableDefinition; |
| } |
|
|
| return new $tableName($options); |
| } |
|
|
| } |
|
|