public function handle(InputInterface $input, OutputInterface $output) { $registry = BaseOrm::getRegistry(); $loader = new Loader(); $issues = $loader->detectConflicts(); if (!empty($issues)) { $message = 'The following migrations seem to indicate they are both the latest migration :' . PHP_EOL; $message .= ' %s ' . PHP_EOL; $output->writeln(sprintf($message, Tools::stringify($issues))); return; } if ($input->getOption('no-interaction')) { $asker = NonInteractiveAsker::createObject($input, $output); } else { $asker = InteractiveAsker::createObject($input, $output); } $autodetector = new AutoDetector($loader->getProjectState(), ProjectState::fromApps($registry), $asker); $changes = $autodetector->getChanges($loader->graph); if (empty($changes)) { $output->writeln('No changes were detected'); return; } if ($input->getOption('dry-run')) { $output->writeln('<info>Migrations :</info>'); /** @var $migration Migration */ foreach ($changes as $migration) { $output->writeln(' -- ' . $migration->getName()); } return; } $this->_writeMigrations($changes, $input, $output); }
/** * {@inheritdoc} */ public function contributeToClass($fieldName, $modelObject) { parent::contributeToClass($fieldName, $modelObject); $callback = function ($kwargs) { /* @var $field RelatedField */ /** @var $related Model */ $related = $kwargs['relatedModel']; $field = $kwargs['fromField']; $field->relation->toModel = $related; $field->doRelatedClass($related, $kwargs['scopeModel']); }; Tools::lazyRelatedOperation($callback, $this->scopeModel, $this->relation->toModel, ['fromField' => $this]); }
public static function prepareValue($value, $lookup) { if (in_array($lookup, ['contains', 'icontains'])) { $value = sprintf('%%%s%%', $value); } elseif (in_array($lookup, ['startswith', 'istartswith'])) { $value = sprintf('%s%%', $value); } elseif (in_array($lookup, ['endswith', 'iendswith'])) { $value = sprintf('%%%s', $value); } elseif ($lookup === 'in' && is_array($value)) { var_dump(Tools::stringify($value)); $value = sprintf('%s', implode(',', $value)); } return $value; }
public static function validateLookup($lookup) { if (!empty($lookup) && !array_key_exists($lookup, self::$lookuOptions)) { throw new LookupError(sprintf('`%1$s` is not a valid lookup parameter the options are %2$s', $lookup, Tools::stringify(self::$lookuOptions))); } }
/** * Converts migration object into a string and adds it to the migration file temple, ready to be written on disk. * * @return string * * @since 1.1.0 * * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**> */ public function getContent() { $imports = []; $stringedOperations = []; foreach ($this->migration->getOperations() as $op) { list($opString, $importString) = FormatFileContent::formatObject($op); array_push($stringedOperations, $opString); $imports = array_merge($imports, $importString); } $imports = array_unique($imports); $importPaths = ''; foreach ($imports as $import) { $import = sprintf('use %s;', $import); $importPaths .= $import . PHP_EOL; } $opContent = '[' . PHP_EOL; foreach ($stringedOperations as $op) { $opContent .= sprintf("\t\t\t%s," . PHP_EOL, $op); } $opContent .= "\t\t]"; $dependencies = $this->migration->getDependency(); $indent = count($dependencies) <= 1 ? false : 3; return sprintf($this->getFileTemplate(), $importPaths, $this->migration->getName(), Tools::stringify($dependencies, $indent), $opContent); }
/** * A normalizes key names to all lowercase. * * @param $name * * @return string * * @since 1.1.0 * * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**> */ public function normalizeKey($name) { return Tools::normalizeKey($name); }
/** * Creates an intermediary model. * * @param ManyToManyField $field * @param Model $model * * @return Model * * @since 1.1.0 * * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**> */ public function createManyToManyIntermediaryModel($field, $model) { $modelName = $model->meta->modelName; if (is_string($field->relation->toModel)) { $toModelName = Tools::resolveRelation($model, $field->relation->toModel); } else { $toModelName = $field->relation->toModel->meta->modelName; } $className = sprintf('%1$s_%2$s', $modelName, $field->name); $intermediaryClass = 'class %1$s extends %2$s{ public function fields(){} }'; $intermediaryClass = sprintf($intermediaryClass, $className, Model::getFullClassName()); if (!class_exists($className, false)) { eval($intermediaryClass); } $from = strtolower($modelName); $to = strtolower($toModelName); if ($from == $to) { $to = sprintf('to_%s', $to); $from = sprintf('from_%s', $from); } $fields = [$from => ForeignKey::createObject(['to' => $modelName, 'dbConstraint' => $field->relation->dbConstraint, 'onDelete' => Delete::CASCADE]), $to => ForeignKey::createObject(['to' => $toModelName, 'dbConstraint' => $field->relation->dbConstraint, 'onDelete' => Delete::CASCADE])]; $meta = ['dbTable' => $field->_getM2MDbTable($model->meta), 'verboseName' => sprintf('%s-%s relationship', $from, $to), 'uniqueTogether' => [$from, $to], 'autoCreated' => true]; $className = '\\' . $className; /** @var $intermediaryObj Model */ $intermediaryObj = new $className(); $intermediaryObj->init($fields, ['meta' => $meta, 'registry' => $field->scopeModel->meta->registry]); return $intermediaryObj; }