Example #1
0
 /**
  * @param Metadata $metadata
  * @param $query
  * @param array $bind
  * @param Connection $db
  */
 public function __construct(Metadata $metadata, $query, array $bind = null, Connection $db = null)
 {
     $this->metadata = $metadata;
     if (null !== $db) {
         $this->db = $db;
     } else {
         $this->db = $metadata->getDbConnection();
     }
     $selectAllFields = [];
     $dbCols = $this->metadata->getDbColNames();
     foreach ($dbCols as $colName) {
         $selectAllFields[] = 't.' . $this->qi($colName);
     }
     $query = str_ireplace(['select *', ':t'], ['SELECT ' . implode(', ', $selectAllFields), $this->qi($this->metadata->getDbTableName()) . ' t'], $query);
     // auto replace :field_name placeholders by their quoted db column names
     $query = preg_replace_callback('/:(\\w+)/', function ($matches) use($metadata) {
         if ($metadata->__isset($matches[1])) {
             return $this->qi($metadata->getField($matches[1])->db_column);
         } else {
             return $matches[0];
         }
     }, $query);
     $this->queryStringCache = $query;
     // other :somename placeholders treated as prepared statement bindings
     if (null !== $bind) {
         $this->bind($bind);
     }
     $this->returnObjects();
 }
Example #2
0
 /**
  * @param Metadata $metadata
  * @param QueryBuilder $qb
  * @param Connection $db
  */
 public function __construct(Metadata $metadata, QueryBuilder $qb = null, Connection $db = null)
 {
     $this->metadata = $metadata;
     if (null !== $db) {
         $this->db = $db;
     } else {
         $this->db = $metadata->getDbConnection();
     }
     if (null !== $qb) {
         $this->qb = $qb;
     } else {
         $this->qb = new QueryBuilder($this->db);
         $this->qb->from($this->qi($metadata->getDbTableName()), $this->qi('t'));
     }
     $this->lookuper = \Dja\Db\Model\Lookup\LookupAbstract::getInstance($this->db);
 }
Example #3
0
 /**
  * @param Metadata $metadata
  * @return Table
  */
 public function metadataToTable(Metadata $metadata)
 {
     $tblName = $metadata->getDbTableName();
     if (isset($this->md2tableCache[$tblName])) {
         return $this->md2tableCache[$tblName];
     }
     $cols = [];
     foreach ($metadata->getLocalFields() as $fieldObj) {
         $col = $fieldObj->getDoctrineColumn();
         $col->setLength($fieldObj->max_length);
         $col->setNotnull(!$fieldObj->null);
         $col->setComment($fieldObj->help_text);
         $col->setAutoincrement($fieldObj->auto_increment);
         $cols[] = $col;
     }
     $table = new Table($tblName, $cols);
     $this->md2tableCache[$tblName] = $table;
     foreach ($metadata->getLocalFields() as $fieldObj) {
         if ($fieldObj->unique) {
             $table->addUniqueIndex([$fieldObj->db_column]);
         } elseif ($fieldObj->db_index) {
             $table->addIndex([$fieldObj->db_column]);
         }
         if ($fieldObj->primary_key) {
             $table->setPrimaryKey([$fieldObj->db_column]);
         }
         if ($this->followRelations === true && $fieldObj instanceof ForeignKey) {
             $relationClass = $fieldObj->relationClass;
             $relationTable = $this->metadataToTable($relationClass::metadata());
             $table->addForeignKeyConstraint($relationTable, [$fieldObj->db_column], [$fieldObj->to_field]);
             $this->generateQueue[] = $relationClass;
         }
     }
     if ($this->followRelations === true) {
         foreach ($metadata->getRelationFields() as $fieldObj) {
             if ($fieldObj instanceof ManyToMany) {
                 if ($fieldObj->throughClass) {
                     $throughClass = $fieldObj->throughClass;
                     //$this->metadataToTable($throughClass::metadata());
                     $this->generateQueue[] = $throughClass;
                 }
             }
         }
     }
     return $table;
 }