. */ /** * Doctrine_Resource_Table * * @author Konsta Vesterinen * @author Jonathan H. Wage * @package Doctrine * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @version $Revision$ * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 */ class Doctrine_Resource_Table { protected $_model = null; protected $_schema = null; public function __construct($model) { $this->_model = $model; $schema = $this->getConfig('schema'); if (isset($schema['schema'][$model]) && $schema['schema'][$model]) { $this->_schema = $schema['schema'][$model]; } if (isset($schema['relations'][$model]) && $schema['relations'][$model]) { $this->_schema['relations'] = $schema['relations'][$model]; } } public function getSchema() { return $this->_schema; } public function getRelations() { return $this->_schema['relations']; } public function getColumns() { return $this->_schema['columns']; } public function getConfig($key = null) { return Doctrine_Resource_Client::getInstance()->getConfig($key); } public function find($pk) { $model = $this->_model; $record = new $model(); $pk = is_array($pk) ? $pk:array($pk); $identifier = $record->identifier(); $identifier = is_array($identifier) ? $identifier:array($identifier); $where = ''; foreach (array_keys($identifier) as $key => $name) { $value = $pk[$key]; $where .= $model.'.' . $name . ' = '.$value; } $query = new Doctrine_Resource_Query(); $query->from($model)->where($where)->limit(1); $result = $query->execute(); return $result->getFirst(); } public function hasColumn($name) { return isset($this->_schema['columns'][$name]) ? true:false; } public function getColumn($name) { if ($this->hasColumn($name)) { return $this->_columns[$name]; } } public function hasRelation($name) { return isset($this->_schema['relations'][$name]) ? true:false; } public function getRelation($name) { if ($this->hasRelation($name)) { return $this->_schema['relations'][$name]; } } public function getIdentifier() { $identifier = array(); $schema = $this->getSchema(); $columns = $schema['columns']; if (isset($columns) && is_array($columns)) { foreach ($columns as $name => $column) { if ($column['primary'] == true) { $identifier[$name] = $name; } } } return $identifier; } }