Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 /**
  * {@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]);
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 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)));
     }
 }
Esempio n. 5
0
 /**
  * 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);
 }
Esempio n. 6
0
 /**
  * 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);
 }
Esempio n. 7
0
 /**
  * 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;
 }