Comments 4
Что у вас за приколы, ставите минус, а комментариев нет... Хоть объясните почему так))
С одной стороны, несколько лет назад на Хабре была статья с анализом изменения во времени оценок опубликованных на Хабре статей. И делался вывод о существовании группы минусаторов, стабильно голосующих против статей вскоре после их публикации.
С другой стороны, любой актуальный PHP-фреймворк уже имеет готовый инструментарий миграций. И из статьи совершенно непонятно, в чём преимущества / недостатки данного компонента в сравнении с существующими популярными решениями.
С другой стороны, любой актуальный 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;Почему БД опциональна?
Вообще, непонятно, что Вы вообще сделали)
Какой сценарий использования? Вы руками создаёте миграции? Или их как то генерировать можно?
Спасибо за комментарий. Большинство моментов исправил.
Тут решение такое, что если есть ошибки, то добавить ключ, а смысла проверять количество после проверки наличия — не вижу. Вот такое решение можно сделать для вашего случая:
Если стоит 0, то применяются все возможные миграции. То есть, действие совершается относительно всех миграций.
Этот момент и так уже реализован:
Зачем? У Вас там массив, пусть 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.
Компонентный подход. Компонент SQL миграций на PHP