Apendice C - Usando clases MapBuilder(constructoras de mapas)

Cuando Propel genera el modelo objeto para su proyecto, él también genera clases MapBuilder que son clases "estaticas" que representan la estructura de su base de datos. Estas clases son usadas para determinar(por ejemplo), que columnas son llaves primarias, llaves foraneass, etc. a nivel de ejecución sin requerir ninguna operación de metadato en su base de datos.

Usted no necesite conocer nada sobre esas clases -- hasta que ellas son utilizadas unicamente dentro de las clases base generadas peer y clases centrales de Propel -- ellas proveen una forma rápida y poderosa para tomar metadatos para su base de datos.

require_once("propel/Propel.php");

Propel::init("bookstore-conf.php");

require_once("Book.php");
require_once("Author.php");
require_once("Publisher.php");

require_once("propel/map/DatabaseMap.php");


try {

  $dbMap = Propel::getDatabaseMap("bookstore");

  $tables = $dbMap->getTables();

  foreach ($tables as $tableName => $table) {
    print "Table: $tableName\n";
    $columns = $table->getColumns();
    foreach ($columns as $column) {
      $creoleType = CreoleTypes::getCreoleName($column->getCreoleType());
      print "\tColumn: " . $column->getColumnName() . "\n";
      print "\t\tFQN: " . $column->getFullyQualifiedName() .  "\n";
      if ($column->isPrimaryKey()) {
        print "\t\tPrimary Key: true\n";
      }
      print "\t\tSize: " . $column->getSize() . "\n";
      print "\t\tType: " . $column->getType() . "\n";
      print "\t\tCreole Type: " . $creoleType . "\n";
    }
  }


} catch (Exception $e) {
  die("Exception: " . $e);
}