From e515e09941224423970c9f5120f52f0abab744bb Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Mon, 11 Oct 2021 12:30:06 -0400 Subject: [PATCH 1/3] Adds generic factories. --- .../Console/Factories/stubs/factory.stub | 3 +++ .../Database/Eloquent/Factories/Factory.php | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Illuminate/Database/Console/Factories/stubs/factory.stub b/src/Illuminate/Database/Console/Factories/stubs/factory.stub index f7a898c9f1fe..6186e6053ae7 100644 --- a/src/Illuminate/Database/Console/Factories/stubs/factory.stub +++ b/src/Illuminate/Database/Console/Factories/stubs/factory.stub @@ -5,6 +5,9 @@ namespace {{ factoryNamespace }}; use Illuminate\Database\Eloquent\Factories\Factory; use {{ namespacedModel }}; +/** + * @extends Factory<{{ model }}> + */ class {{ factory }}Factory extends Factory { /** diff --git a/src/Illuminate/Database/Eloquent/Factories/Factory.php b/src/Illuminate/Database/Eloquent/Factories/Factory.php index 11cb5adc61db..65a2fc673d37 100644 --- a/src/Illuminate/Database/Eloquent/Factories/Factory.php +++ b/src/Illuminate/Database/Eloquent/Factories/Factory.php @@ -14,6 +14,9 @@ use Illuminate\Support\Traits\Macroable; use Throwable; +/** + * @template TDestinationModel + */ abstract class Factory { use ForwardsCalls, Macroable { @@ -23,7 +26,7 @@ abstract class Factory /** * The name of the factory's corresponding model. * - * @var string + * @var class-string */ protected $model; @@ -195,7 +198,7 @@ public function raw($attributes = [], ?Model $parent = null) * Create a single model and persist it to the database. * * @param array $attributes - * @return \Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|TDestinationModel */ public function createOne($attributes = []) { @@ -206,7 +209,7 @@ public function createOne($attributes = []) * Create a single model and persist it to the database. * * @param array $attributes - * @return \Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|TDestinationModel */ public function createOneQuietly($attributes = []) { @@ -246,7 +249,7 @@ public function createManyQuietly(iterable $records) * * @param array $attributes * @param \Illuminate\Database\Eloquent\Model|null $parent - * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|TDestinationModel */ public function create($attributes = [], ?Model $parent = null) { @@ -274,7 +277,7 @@ public function create($attributes = [], ?Model $parent = null) * * @param array $attributes * @param \Illuminate\Database\Eloquent\Model|null $parent - * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|TDestinationModel */ public function createQuietly($attributes = [], ?Model $parent = null) { @@ -335,7 +338,7 @@ protected function createChildren(Model $model) * Make a single instance of the model. * * @param callable|array $attributes - * @return \Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|TDestinationModel */ public function makeOne($attributes = []) { @@ -347,7 +350,7 @@ public function makeOne($attributes = []) * * @param array $attributes * @param \Illuminate\Database\Eloquent\Model|null $parent - * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|TDestinationModel */ public function make($attributes = [], ?Model $parent = null) { @@ -657,7 +660,7 @@ protected function newInstance(array $arguments = []) * Get a new model instance. * * @param array $attributes - * @return \Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|TDestinationModel */ public function newModel(array $attributes = []) { From 880d414105cdbc06ae484a2edd891d046948d1e7 Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Mon, 11 Oct 2021 12:33:58 -0400 Subject: [PATCH 2/3] Adds generic factories. --- src/Illuminate/Database/Eloquent/Factories/Factory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Factories/Factory.php b/src/Illuminate/Database/Eloquent/Factories/Factory.php index 65a2fc673d37..b1e598fbbb90 100644 --- a/src/Illuminate/Database/Eloquent/Factories/Factory.php +++ b/src/Illuminate/Database/Eloquent/Factories/Factory.php @@ -26,7 +26,7 @@ abstract class Factory /** * The name of the factory's corresponding model. * - * @var class-string + * @var string|class-string */ protected $model; From 627bca31e97957a33381bd28b801f1eb82bbc321 Mon Sep 17 00:00:00 2001 From: Aidan Casey Date: Mon, 11 Oct 2021 12:42:08 -0400 Subject: [PATCH 3/3] Adds type restriction. --- src/Illuminate/Database/Eloquent/Factories/Factory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Factories/Factory.php b/src/Illuminate/Database/Eloquent/Factories/Factory.php index b1e598fbbb90..19bcee6a2740 100644 --- a/src/Illuminate/Database/Eloquent/Factories/Factory.php +++ b/src/Illuminate/Database/Eloquent/Factories/Factory.php @@ -15,7 +15,7 @@ use Throwable; /** - * @template TDestinationModel + * @template TDestinationModel of \Illuminate\Database\Eloquent\Model */ abstract class Factory {