/** * 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'); } } }