/** * Adds joins recursively from model's definition if relation to other models exists * @param PerfORM $model */ protected function addJoins($model, $inner = true) { if ($model->isExtended()) { $this->joins[] = sprintf("\tINNER JOIN \"%s\" AS \"%s\" ON \"%s\".\"%s\" = \"%s\".\"%s\"", $model->getExtend()->getTableName(), $model->getExtend()->getAlias(), $model->getExtend()->getAlias(), $model->getExtend()->getPrimaryKey(), $model->getAlias(), $model->getField($model->getPrimaryKey())->getRealName()); } foreach ($model->getFields() as $field) { if ($field->getIdent() == PerfORM::ForeignKeyField && !$field->isEnabledLazyLoading()) { $join_type = !$field->isNullable() && $inner ? 'INNER' : 'LEFT'; $this->joins[] = sprintf("\t%s JOIN \"%s\" AS \"%s\" ON \"%s\".\"%s\" = \"%s\".\"%s\"", $join_type, $field->getReference()->getTableName(), $field->getReference()->getAlias(), $field->getReference()->getAlias(), $field->getReference()->getPrimaryKey(), $model->getAlias(), $field->getRealName()); $this->addJoins($field->getReference(), $join_type == 'INNER'); } } }
/** * @param PerfORM $model * @return stdClass */ public function getCreateTable($model) { $fields = array(); foreach ($model->getFields() as $field) { $fields[] = $this->getField($field, $model); } $keys = array(); if ($pk = $model->getPrimaryKey()) { $keys[] = $this->getPrimaryKey($model, $pk); } foreach ($model->getForeignKeys() as $foreignKey) { $keys[] = $this->getForeignKey($model, $foreignKey); } return (object) array('table' => $model->getTableName(), 'fields' => $fields, 'keys' => $keys); }