Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/Illuminate/Database/Eloquent/Factories/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ public function raw($attributes = [], ?Model $parent = null)
*
* @param (callable(array<string, mixed>): array<string, mixed>)|array<string, mixed> $attributes
* @return \Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return TModel
*/
public function createOne($attributes = [])
{
Expand All @@ -211,6 +212,7 @@ public function createOne($attributes = [])
*
* @param (callable(array<string, mixed>): array<string, mixed>)|array<string, mixed> $attributes
* @return \Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return TModel
*/
public function createOneQuietly($attributes = [])
{
Expand All @@ -222,6 +224,7 @@ public function createOneQuietly($attributes = [])
*
* @param iterable<int, array<string, mixed>> $records
* @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>
* @phpstan-return \Illuminate\Database\Eloquent\Collection<int, TModel>
*/
public function createMany(iterable $records)
{
Expand All @@ -237,6 +240,7 @@ public function createMany(iterable $records)
*
* @param iterable<int, array<string, mixed>> $records
* @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>
* @phpstan-return \Illuminate\Database\Eloquent\Collection<int, TModel>
*/
public function createManyQuietly(iterable $records)
{
Expand All @@ -251,6 +255,7 @@ public function createManyQuietly(iterable $records)
* @param (callable(array<string, mixed>): array<string, mixed>)|array<string, mixed> $attributes
* @param \Illuminate\Database\Eloquent\Model|null $parent
* @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>|\Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return \Illuminate\Database\Eloquent\Collection<int, TModel>|TModel
*/
public function create($attributes = [], ?Model $parent = null)
{
Expand Down Expand Up @@ -279,6 +284,7 @@ public function create($attributes = [], ?Model $parent = null)
* @param array<string, mixed> $attributes
* @param \Illuminate\Database\Eloquent\Model|null $parent
* @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>|\Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return \Illuminate\Database\Eloquent\Collection<int, TModel>|TModel
*/
public function createQuietly($attributes = [], ?Model $parent = null)
{
Expand All @@ -293,6 +299,7 @@ public function createQuietly($attributes = [], ?Model $parent = null)
* @param array<string, mixed> $attributes
* @param \Illuminate\Database\Eloquent\Model|null $parent
* @return \Closure(): (\Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>|\Illuminate\Database\Eloquent\Model|TModel)
* @phpstan-return \Closure(): (\Illuminate\Database\Eloquent\Collection<int, TModel>|TModel)
*/
public function lazy(array $attributes = [], ?Model $parent = null)
{
Expand Down Expand Up @@ -340,6 +347,7 @@ protected function createChildren(Model $model)
*
* @param (callable(array<string, mixed>): array<string, mixed>)|array<string, mixed> $attributes
* @return \Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return TModel
*/
public function makeOne($attributes = [])
{
Expand All @@ -352,6 +360,7 @@ public function makeOne($attributes = [])
* @param (callable(array<string, mixed>): array<string, mixed>)|array<string, mixed> $attributes
* @param \Illuminate\Database\Eloquent\Model|null $parent
* @return \Illuminate\Database\Eloquent\Collection<int, \Illuminate\Database\Eloquent\Model|TModel>|\Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return \Illuminate\Database\Eloquent\Collection<int, TModel>|TModel
*/
public function make($attributes = [], ?Model $parent = null)
{
Expand Down Expand Up @@ -578,6 +587,7 @@ public function for($factory, $relationship = null)
* Add a new "after making" callback to the model definition.
*
* @param \Closure(\Illuminate\Database\Eloquent\Model|TModel): mixed $callback
* @phpstan-param \Closure(TModel): mixed $callback
* @return static
*/
public function afterMaking(Closure $callback)
Expand All @@ -589,6 +599,7 @@ public function afterMaking(Closure $callback)
* Add a new "after creating" callback to the model definition.
*
* @param \Closure(\Illuminate\Database\Eloquent\Model|TModel): mixed $callback
* @phpstan-param \Closure(TModel): mixed $callback
* @return static
*/
public function afterCreating(Closure $callback)
Expand Down Expand Up @@ -673,6 +684,7 @@ protected function newInstance(array $arguments = [])
*
* @param array<string, mixed> $attributes
* @return \Illuminate\Database\Eloquent\Model|TModel
* @phpstan-return TModel
*/
public function newModel(array $attributes = [])
{
Expand All @@ -685,6 +697,7 @@ public function newModel(array $attributes = [])
* Get the name of the model that is generated by the factory.
*
* @return class-string<\Illuminate\Database\Eloquent\Model|TModel>
* @phpstan-return class-string<TModel>
*/
public function modelName()
{
Expand Down
97 changes: 28 additions & 69 deletions types/Database/Eloquent/Factories/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,87 +48,55 @@ public function definition()
return ['string' => 'string'];
}));

// assertType('User', $factory->createOne());
// assertType('User', $factory->createOne(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne());
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(function ($attributes) {
assertType('User', $factory->createOne());
assertType('User', $factory->createOne(['string' => 'string']));
assertType('User', $factory->createOne(function ($attributes) {
// assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));

// assertType('User', $factory->createOneQuietly());
// assertType('User', $factory->createOneQuietly(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly());
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(function ($attributes) {
assertType('User', $factory->createOneQuietly());
assertType('User', $factory->createOneQuietly(['string' => 'string']));
assertType('User', $factory->createOneQuietly(function ($attributes) {
// assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));

// assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createMany([['string' => 'string']]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createMany(
[['string' => 'string']]
));

// assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createManyQuietly([['string' => 'string']]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createManyQuietly(
[['string' => 'string']]
));

// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create(function ($attributes) {
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createMany([['string' => 'string']]));

assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createManyQuietly([['string' => 'string']]));

assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create());
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create(function ($attributes) {
// assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));

// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->createQuietly());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->createQuietly([
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly());
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly([
'string' => 'string',
]));

// assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy());
// assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy([
// 'string' => 'string',
// ]));
assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->lazy());
assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->lazy([
assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy());
assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy([
'string' => 'string',
]));

// assertType('User', $factory->makeOne());
// assertType('User', $factory->makeOne([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne());
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne([
assertType('User', $factory->makeOne());
assertType('User', $factory->makeOne([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne(function ($attributes) {
assertType('User', $factory->makeOne(function ($attributes) {
// assert('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));

// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make([
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make());
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make(function ($attributes) {
assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make(function ($attributes) {
// assert('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
Expand All @@ -151,21 +119,15 @@ public function definition()
assertType('UserFactory', $factory->for($factory));
assertType('UserFactory', $factory->for($factory->createOne()));

// assertType('UserFactory', $factory->afterMaking(function ($user) {
// assertType('User', $user);
// }));
assertType('UserFactory', $factory->afterMaking(function ($user) {
assertType('Illuminate\Database\Eloquent\Model', $user);
assertType('User', $user);
}));
assertType('UserFactory', $factory->afterMaking(function ($user) {
return 'string';
}));

// assertType('UserFactory', $factory->afterCreating(function ($user) {
// assertType('User', $user);
// }));
assertType('UserFactory', $factory->afterCreating(function ($user) {
assertType('Illuminate\Database\Eloquent\Model', $user);
assertType('User', $user);
}));
assertType('UserFactory', $factory->afterCreating(function ($user) {
return 'string';
Expand All @@ -175,13 +137,10 @@ public function definition()

assertType('UserFactory', $factory->connection('string'));

// assertType('User', $factory->newModel());
// assertType('User', $factory->newModel(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->newModel());
assertType('Illuminate\Database\Eloquent\Model', $factory->newModel(['string' => 'string']));
assertType('User', $factory->newModel());
assertType('User', $factory->newModel(['string' => 'string']));

// assertType('class-string<User>', $factory->modelName());
assertType('class-string<Illuminate\Database\Eloquent\Model>', $factory->modelName());
assertType('class-string<User>', $factory->modelName());

Factory::guessModelNamesUsing(function (Factory $factory) {
return match (true) {
Expand Down