conflictClass = $conflictClass; $this->conflictClassDual = $conflictClassDual; $this->conflictFilter = $conflictFilter; } /** * Returs a sequence of AlterTable instructions that are non conflicting * based on the constructor parameters. * * @param \Phinx\Db\Plan\AlterTable $alter The collection of actions to inspect * @return \Phinx\Db\Plan\AlterTable[] A list of AlterTable that can be executed without * this type of conflict */ public function __invoke(AlterTable $alter): array { $conflictActions = array_filter($alter->getActions(), function ($action) { return $action instanceof $this->conflictClass; }); $originalAlter = new AlterTable($alter->getTable()); $newAlter = new AlterTable($alter->getTable()); foreach ($alter->getActions() as $action) { if (!$action instanceof $this->conflictClassDual) { $originalAlter->addAction($action); continue; } $found = false; $matches = $this->conflictFilter; foreach ($conflictActions as $ca) { if ($matches($ca, $action)) { $found = true; break; } } if ($found) { $newAlter->addAction($action); } else { $originalAlter->addAction($action); } } return [$originalAlter, $newAlter]; } }