diff --git a/src/Generators/ControllerGenerator.php b/src/Generators/ControllerGenerator.php index e979e944..af880a64 100644 --- a/src/Generators/ControllerGenerator.php +++ b/src/Generators/ControllerGenerator.php @@ -104,6 +104,8 @@ private function buildMethods(Controller $controller) } $body = ''; + $using_validation = false; + foreach ($statements as $statement) { if ($statement instanceof SendStatement) { $body .= self::INDENT.$statement->output().PHP_EOL; @@ -115,6 +117,7 @@ private function buildMethods(Controller $controller) $this->addImport($controller, config('blueprint.namespace').'\\Mail\\'.$statement->mail()); } } elseif ($statement instanceof ValidateStatement) { + $using_validation = true; $class_name = $controller->name().Str::studly($name).'Request'; $fqcn = config('blueprint.namespace').'\\Http\\Requests\\'.($controller->namespace() ? $controller->namespace().'\\' : '').$class_name; @@ -153,7 +156,7 @@ private function buildMethods(Controller $controller) } elseif ($statement instanceof SessionStatement) { $body .= self::INDENT.$statement->output().PHP_EOL; } elseif ($statement instanceof EloquentStatement) { - $body .= self::INDENT.$statement->output($controller->prefix(), $name).PHP_EOL; + $body .= self::INDENT.$statement->output($controller->prefix(), $name, $using_validation).PHP_EOL; $this->addImport($controller, $this->determineModel($controller, $statement->reference())); } elseif ($statement instanceof QueryStatement) { $body .= self::INDENT.$statement->output($controller->prefix()).PHP_EOL; diff --git a/src/Models/Statements/EloquentStatement.php b/src/Models/Statements/EloquentStatement.php index f3ac2990..ff70d759 100644 --- a/src/Models/Statements/EloquentStatement.php +++ b/src/Models/Statements/EloquentStatement.php @@ -44,7 +44,7 @@ public function columns(): array return $this->columns; } - public function output(string $controller_prefix, string $context): string + public function output(string $controller_prefix, string $context, bool $using_validation = false): string { $model = $this->determineModel($controller_prefix); $code = ''; @@ -61,14 +61,17 @@ public function output(string $controller_prefix, string $context): string } if ($this->operation() == 'update') { - $columns = ''; if (!empty($this->columns())) { $columns = implode(', ', array_map(function ($column) { return sprintf("'%s' => \$%s", $column, $column); }, $this->columns())); - } - $code = "$" . Str::camel($model) . '->update([' . $columns . ']);'; + $code = "$" . Str::camel($model) . '->update([' . $columns . ']);'; + } elseif ($using_validation) { + $code = "$" . Str::camel($model) . '->update($request->validated());'; + } else { + $code = "$" . Str::camel($model) . '->update([]);'; + } } if ($this->operation() == 'find') { diff --git a/tests/fixtures/controllers/certificate-controller.php b/tests/fixtures/controllers/certificate-controller.php index 51362583..c8a2e0f4 100644 --- a/tests/fixtures/controllers/certificate-controller.php +++ b/tests/fixtures/controllers/certificate-controller.php @@ -50,7 +50,7 @@ public function show(Request $request, Certificate $certificate) */ public function update(CertificateUpdateRequest $request, Certificate $certificate) { - $certificate->update([]); + $certificate->update($request->validated()); return new CertificateResource($certificate); } diff --git a/tests/fixtures/controllers/certificate-type-controller.php b/tests/fixtures/controllers/certificate-type-controller.php index 766242bf..f7972b73 100644 --- a/tests/fixtures/controllers/certificate-type-controller.php +++ b/tests/fixtures/controllers/certificate-type-controller.php @@ -50,7 +50,7 @@ public function show(Request $request, CertificateType $certificateType) */ public function update(CertificateTypeUpdateRequest $request, CertificateType $certificateType) { - $certificateType->update([]); + $certificateType->update($request->validated()); return new CertificateTypeResource($certificateType); } diff --git a/tests/fixtures/controllers/custom-models-namespace.php b/tests/fixtures/controllers/custom-models-namespace.php index 7aeb581f..4818f3f8 100644 --- a/tests/fixtures/controllers/custom-models-namespace.php +++ b/tests/fixtures/controllers/custom-models-namespace.php @@ -50,7 +50,7 @@ public function show(Request $request, Tag $tag) */ public function update(TagUpdateRequest $request, Tag $tag) { - $tag->update([]); + $tag->update($request->validated()); return new TagResource($tag); }