static function toCode(ModelDescriptor $descriptor) { $classFile = new CodeGenClassFile(); $class = new CodeGenClass($descriptor->modelClass); $class->setExtends('Model'); $classFile->addClass($class); $classDocComment = new CodeGenDocComment(); $classDocComment->addLine('!Database ' . $descriptor->source); $classDocComment->addLine('!Table ' . $descriptor->getTable()); $class->setDocComment($classDocComment); foreach ($descriptor->properties as $prop) { $property = new CodeGenProperty($prop->name); $columnDocComment = '!Column '; if ($prop->isPrimaryKey) { $columnDocComment .= 'PrimaryKey, '; } $columnDocComment .= $prop->type; if ($prop->isAutoIncrement) { $columnDocComment .= ', AutoIncrement'; } $propertyDocComment = new CodeGenDocComment($columnDocComment); $property->setDocComment($propertyDocComment); $class->addProperty($property); } return $classFile->toCode(); }
/** * Transform a model descriptor to a table descriptor. * * @param ModelDescriptor $descriptor * @return RecessTableDescriptor */ function modelToTableDescriptor(ModelDescriptor $descriptor) { Library::import('recess.database.pdo.RecessTableDescriptor'); Library::import('recess.database.pdo.RecessColumnDescriptor'); $tableDescriptor = new RecessTableDescriptor(); $tableDescriptor->name = $descriptor->getTable(); foreach ($descriptor->properties as $property) { $tableDescriptor->addColumn($property->name, $property->type, true, $property->isPrimaryKey, array(), $property->isAutoIncrement ? array('autoincrement' => true) : array()); } return $tableDescriptor; }
/** * Return a SqlBuilder object which has set the table and optionally * assigned values to columns based on this instances' properties. This is used in * insert(), update(), and delete() * * @param ModelDescriptor $descriptor * @param boolean $useAssignment * @param boolean $excludePrimaryKey * @return SqlBuilder */ protected function assignmentSqlForThisObject(ModelDescriptor $descriptor, $useAssignment = true, $excludePrimaryKey = false) { $sqlBuilder = new SqlBuilder(); $sqlBuilder->from($descriptor->getTable()); if (empty($descriptor->columns)) { throw new RecessException('The "' . $descriptor->getTable() . '" table does not appear to exist in your database.', get_defined_vars()); } foreach ($this as $column => $value) { if ($excludePrimaryKey && $descriptor->primaryKey == $column) { continue; } if (in_array($column, $descriptor->columns) && isset($value)) { if ($useAssignment) { $sqlBuilder->assign($column, $value); } else { $sqlBuilder->equal($column, $value); } } } return $sqlBuilder; }