All streams
Search
Write a publication
Pull to refresh

Comments 4

Что у вас за приколы, ставите минус, а комментариев нет... Хоть объясните почему так))

С одной стороны, несколько лет назад на Хабре была статья с анализом изменения во времени оценок опубликованных на Хабре статей. И делался вывод о существовании группы минусаторов, стабильно голосующих против статей вскоре после их публикации.

С другой стороны, любой актуальный PHP-фреймворк уже имеет готовый инструментарий миграций. И из статьи совершенно непонятно, в чём преимущества / недостатки данного компонента в сравнении с существующими популярными решениями.
return bool Возвращает true, если миграция была успешно создана. В остальных случаях выкидывает исключение
Не возвращайте ничего лучше, потому что смысла нет. Если бы возвращалось true\false, то я в вызывающем коде мог бы проверить и сообщение какое вывести

return ['История миграций пуста'];
Зачем? Если я запрашиваю список миграций, зачем Вы мне отдаёте массив с сообщением, что миграций нет? Я проверю результат на количество элементов и подумаю, что одна миграция есть всё таки. Или мне на текст завязаться?

throw new SqlMigrationException(«Ошибка применения миграция {$name}»);
А какая ошибка? Зачем Вы лишаете меня возможности посмотреть ошибку, которую вернула БД?

$executeCount = $count === 0? $executeListCount: min($count, $executeListCount);
Почему бы это не убрать в метод execute, вместо дублирования в up и down?

Что если мне нужно свалиться на первой неуспешной миграции, а не идти до конца?

Эти методы сами за себя говорят. Но на всякий случай, укажу тут их описание из PHPDoc:
Честно, эти методы за себя не говорят ни с докой, ни без неё)

param int $count Количество миграция (0 — относительно всех)
Что такое 'относительно всех'?

Возвращает список применения и ошибочных миграций
Что за список применения? Применённых?

Ключ error добавляется только в случае ошибки выполнения миграции.
Зачем? У Вас там массив, пусть error всегда будет, чтоб на количество его проверять, а не на наличие, а потом на количество

param int $limit Ограничение длины списка (null — полный список)
Почему до этого был 0 для вывода всего, а тут null?

Большинство методов возвращает наборы данных или логические значения. Данный подход позволит написать практически любую обертку для собственных нужд.
Непонятно

protected ?DatabaseInterface $database;
Почему БД опциональна?

Вообще, непонятно, что Вы вообще сделали)
Какой сценарий использования? Вы руками создаёте миграции? Или их как то генерировать можно?
Спасибо за комментарий. Большинство моментов исправил.
Зачем? У Вас там массив, пусть error всегда будет, чтоб на количество его проверять, а не на наличие, а потом на количество

Тут решение такое, что если есть ошибки, то добавить ключ, а смысла проверять количество после проверки наличия — не вижу. Вот такое решение можно сделать для вашего случая:
if (array_key_exists('success', $migrations)) {
	foreach ($migrations['success'] as $successMigration) {
		Console::writeLine("Миграция {$successMigration['name']} успешно применена", Console::FG_GREEN);
	}
}

if (array_key_exists('error', $migrations)) {
	foreach ($migrations['error'] as $errorMigration) {
		Console::writeLine("Ошибка применения миграции {$errorMigration['name']}", Console::FG_RED);
		Console::writeLine($errorMigration['errorMessage'], Console::FG_WHITE);
	}
}

Что такое 'относительно всех'?

Если стоит 0, то применяются все возможные миграции. То есть, действие совершается относительно всех миграций.
Что если мне нужно свалиться на первой неуспешной миграции, а не идти до конца?

Этот момент и так уже реализован:
} catch (SqlMigrationException | PDOException $exception) {
	$migrationInfo['error'][] = array_merge($migration, ['errorMessage' => $exception->getMessage()]);
	
	break;
}
Sign up to leave a comment.

Articles