From 13dd0d591cf8749ac3eafa44d697d79add03e8a4 Mon Sep 17 00:00:00 2001 From: MrRio Date: Wed, 4 Sep 2019 09:06:43 +0100 Subject: [PATCH 1/5] Suggest running migrations when a column is missing --- src/IgnitionServiceProvider.php | 2 ++ .../MissingColumnSolutionProvider.php | 36 +++++++++++++++++++ src/Solutions/RunMigrationsSolution.php | 11 ++++++ 3 files changed, 49 insertions(+) create mode 100644 src/SolutionProviders/MissingColumnSolutionProvider.php diff --git a/src/IgnitionServiceProvider.php b/src/IgnitionServiceProvider.php index bde5efca..2b931e36 100644 --- a/src/IgnitionServiceProvider.php +++ b/src/IgnitionServiceProvider.php @@ -47,6 +47,7 @@ use Facade\Ignition\SolutionProviders\TableNotFoundSolutionProvider; use Illuminate\View\Engines\CompilerEngine as LaravelCompilerEngine; use Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider; +use Facade\Ignition\SolutionProviders\MissingColumnsSolutionProvider; use Facade\Ignition\SolutionProviders\InvalidRouteActionSolutionProvider; use Facade\Ignition\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider; use Facade\IgnitionContracts\SolutionProviderRepository as SolutionProviderRepositoryContract; @@ -303,6 +304,7 @@ protected function getDefaultSolutions(): array InvalidRouteActionSolutionProvider::class, ViewNotFoundSolutionProvider::class, MergeConflictSolutionProvider::class, + MissingColumnsSolutionProvider::class ]; } diff --git a/src/SolutionProviders/MissingColumnSolutionProvider.php b/src/SolutionProviders/MissingColumnSolutionProvider.php new file mode 100644 index 00000000..91534fa9 --- /dev/null +++ b/src/SolutionProviders/MissingColumnSolutionProvider.php @@ -0,0 +1,36 @@ +isBadTableErrorCode($throwable->getCode()); + } + + protected function isBadTableErrorCode($code): bool + { + return $code === static::MYSQL_BAD_TABLE_CODE; + } + + public function getSolutions(Throwable $throwable): array + { + $solution = new RunMigrationsSolution('A column was not found'); + return [$solution]; + } +} diff --git a/src/Solutions/RunMigrationsSolution.php b/src/Solutions/RunMigrationsSolution.php index b1b96281..afbf4530 100644 --- a/src/Solutions/RunMigrationsSolution.php +++ b/src/Solutions/RunMigrationsSolution.php @@ -7,8 +7,19 @@ class RunMigrationsSolution implements RunnableSolution { + + private $customTitle; + + public function __construct($customTitle = null) + { + $this->customTitle = $customTitle; + } + public function getSolutionTitle(): string { + if (isset($this->customTitle)) { + return $this->customTitle; + } return 'A table was not found'; } From 77e380f1152e4fd36862c022f2b7204496595e3f Mon Sep 17 00:00:00 2001 From: MrRio Date: Wed, 4 Sep 2019 09:14:28 +0100 Subject: [PATCH 2/5] Style CI fixes --- src/IgnitionServiceProvider.php | 4 ++-- src/SolutionProviders/MissingColumnSolutionProvider.php | 2 +- src/Solutions/RunMigrationsSolution.php | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/IgnitionServiceProvider.php b/src/IgnitionServiceProvider.php index 2b931e36..8de7e504 100644 --- a/src/IgnitionServiceProvider.php +++ b/src/IgnitionServiceProvider.php @@ -46,8 +46,8 @@ use Facade\Ignition\SolutionProviders\MissingImportSolutionProvider; use Facade\Ignition\SolutionProviders\TableNotFoundSolutionProvider; use Illuminate\View\Engines\CompilerEngine as LaravelCompilerEngine; +use Facade\Ignition\SolutionProviders\MissingColumnSolutionProvider; use Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider; -use Facade\Ignition\SolutionProviders\MissingColumnsSolutionProvider; use Facade\Ignition\SolutionProviders\InvalidRouteActionSolutionProvider; use Facade\Ignition\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider; use Facade\IgnitionContracts\SolutionProviderRepository as SolutionProviderRepositoryContract; @@ -304,7 +304,7 @@ protected function getDefaultSolutions(): array InvalidRouteActionSolutionProvider::class, ViewNotFoundSolutionProvider::class, MergeConflictSolutionProvider::class, - MissingColumnsSolutionProvider::class + MissingColumnSolutionProvider::class, ]; } diff --git a/src/SolutionProviders/MissingColumnSolutionProvider.php b/src/SolutionProviders/MissingColumnSolutionProvider.php index 91534fa9..395f02f3 100644 --- a/src/SolutionProviders/MissingColumnSolutionProvider.php +++ b/src/SolutionProviders/MissingColumnSolutionProvider.php @@ -7,7 +7,7 @@ use Facade\Ignition\Solutions\RunMigrationsSolution; use Facade\IgnitionContracts\HasSolutionsForThrowable; -class MissingColumnsSolutionProvider implements HasSolutionsForThrowable +class MissingColumnSolutionProvider implements HasSolutionsForThrowable { /** * See https://dev.mysql.com/doc/refman/8.0/en/server-error-reference.html#error_er_bad_field_error. diff --git a/src/Solutions/RunMigrationsSolution.php b/src/Solutions/RunMigrationsSolution.php index afbf4530..7d5bf4fe 100644 --- a/src/Solutions/RunMigrationsSolution.php +++ b/src/Solutions/RunMigrationsSolution.php @@ -7,7 +7,6 @@ class RunMigrationsSolution implements RunnableSolution { - private $customTitle; public function __construct($customTitle = null) From f9419a9ee283e7bea6b79db6d8197039b75ba131 Mon Sep 17 00:00:00 2001 From: MrRio Date: Wed, 4 Sep 2019 09:19:26 +0100 Subject: [PATCH 3/5] styleci --- src/IgnitionServiceProvider.php | 2 +- src/SolutionProviders/MissingColumnSolutionProvider.php | 1 + src/Solutions/RunMigrationsSolution.php | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/IgnitionServiceProvider.php b/src/IgnitionServiceProvider.php index 8de7e504..de8f5c7b 100644 --- a/src/IgnitionServiceProvider.php +++ b/src/IgnitionServiceProvider.php @@ -43,10 +43,10 @@ use Facade\Ignition\SolutionProviders\DefaultDbNameSolutionProvider; use Facade\Ignition\SolutionProviders\MergeConflictSolutionProvider; use Facade\Ignition\SolutionProviders\MissingAppKeySolutionProvider; +use Facade\Ignition\SolutionProviders\MissingColumnSolutionProvider; use Facade\Ignition\SolutionProviders\MissingImportSolutionProvider; use Facade\Ignition\SolutionProviders\TableNotFoundSolutionProvider; use Illuminate\View\Engines\CompilerEngine as LaravelCompilerEngine; -use Facade\Ignition\SolutionProviders\MissingColumnSolutionProvider; use Facade\Ignition\SolutionProviders\MissingPackageSolutionProvider; use Facade\Ignition\SolutionProviders\InvalidRouteActionSolutionProvider; use Facade\Ignition\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider; diff --git a/src/SolutionProviders/MissingColumnSolutionProvider.php b/src/SolutionProviders/MissingColumnSolutionProvider.php index 395f02f3..d5b790dd 100644 --- a/src/SolutionProviders/MissingColumnSolutionProvider.php +++ b/src/SolutionProviders/MissingColumnSolutionProvider.php @@ -31,6 +31,7 @@ protected function isBadTableErrorCode($code): bool public function getSolutions(Throwable $throwable): array { $solution = new RunMigrationsSolution('A column was not found'); + return [$solution]; } } diff --git a/src/Solutions/RunMigrationsSolution.php b/src/Solutions/RunMigrationsSolution.php index 7d5bf4fe..8cbde0c6 100644 --- a/src/Solutions/RunMigrationsSolution.php +++ b/src/Solutions/RunMigrationsSolution.php @@ -19,6 +19,7 @@ public function getSolutionTitle(): string if (isset($this->customTitle)) { return $this->customTitle; } + return 'A table was not found'; } From 6e32bbd0d7baa870ead548a3514e877b82abf35b Mon Sep 17 00:00:00 2001 From: MrRio Date: Wed, 4 Sep 2019 09:42:51 +0100 Subject: [PATCH 4/5] Rename to MYSQL_BAD_FIELD_CODE --- src/SolutionProviders/MissingColumnSolutionProvider.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SolutionProviders/MissingColumnSolutionProvider.php b/src/SolutionProviders/MissingColumnSolutionProvider.php index d5b790dd..c11700cd 100644 --- a/src/SolutionProviders/MissingColumnSolutionProvider.php +++ b/src/SolutionProviders/MissingColumnSolutionProvider.php @@ -12,7 +12,7 @@ class MissingColumnSolutionProvider implements HasSolutionsForThrowable /** * See https://dev.mysql.com/doc/refman/8.0/en/server-error-reference.html#error_er_bad_field_error. */ - const MYSQL_BAD_TABLE_CODE = '42S22'; + const MYSQL_BAD_FIELD_CODE = '42S22'; public function canSolve(Throwable $throwable): bool { @@ -25,7 +25,7 @@ public function canSolve(Throwable $throwable): bool protected function isBadTableErrorCode($code): bool { - return $code === static::MYSQL_BAD_TABLE_CODE; + return $code === static::MYSQL_BAD_FIELD_CODE; } public function getSolutions(Throwable $throwable): array From 1d56350b396486d3822d3cc5bfe060e2835cb22f Mon Sep 17 00:00:00 2001 From: MrRio Date: Wed, 4 Sep 2019 11:09:16 +0100 Subject: [PATCH 5/5] Make both solution providers pass in their custom title --- src/SolutionProviders/MissingColumnSolutionProvider.php | 4 +--- src/SolutionProviders/TableNotFoundSolutionProvider.php | 2 +- src/Solutions/RunMigrationsSolution.php | 8 ++------ 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/SolutionProviders/MissingColumnSolutionProvider.php b/src/SolutionProviders/MissingColumnSolutionProvider.php index c11700cd..bdacfdc2 100644 --- a/src/SolutionProviders/MissingColumnSolutionProvider.php +++ b/src/SolutionProviders/MissingColumnSolutionProvider.php @@ -30,8 +30,6 @@ protected function isBadTableErrorCode($code): bool public function getSolutions(Throwable $throwable): array { - $solution = new RunMigrationsSolution('A column was not found'); - - return [$solution]; + return [new RunMigrationsSolution('A column was not found')]; } } diff --git a/src/SolutionProviders/TableNotFoundSolutionProvider.php b/src/SolutionProviders/TableNotFoundSolutionProvider.php index 9ce2f4ba..ed8e20de 100644 --- a/src/SolutionProviders/TableNotFoundSolutionProvider.php +++ b/src/SolutionProviders/TableNotFoundSolutionProvider.php @@ -30,6 +30,6 @@ protected function isBadTableErrorCode($code): bool public function getSolutions(Throwable $throwable): array { - return [new RunMigrationsSolution()]; + return [new RunMigrationsSolution('A table was not found')]; } } diff --git a/src/Solutions/RunMigrationsSolution.php b/src/Solutions/RunMigrationsSolution.php index 8cbde0c6..346ecc8f 100644 --- a/src/Solutions/RunMigrationsSolution.php +++ b/src/Solutions/RunMigrationsSolution.php @@ -9,18 +9,14 @@ class RunMigrationsSolution implements RunnableSolution { private $customTitle; - public function __construct($customTitle = null) + public function __construct($customTitle = '') { $this->customTitle = $customTitle; } public function getSolutionTitle(): string { - if (isset($this->customTitle)) { - return $this->customTitle; - } - - return 'A table was not found'; + return $this->customTitle; } public function getSolutionDescription(): string