PHP is getting more mature and allows us to program strong typed in new ways with each new version, however we still lack the option to have generic lists/arrays. This package aims to provide such a thing in the meantime.
The TypeSafeCollection
provided by this package will make sure that any object within it is the object you expect.
Add this package to composer.
composer require webparking/laravel-type-safe-collection
/**
* @method \ArrayIterator|User[] getIterator()
* @method User|null first()
*/
class UserCollection extends TypeSafeCollection
{
protected $type = User::class;
}
class User extends Model
{
public function newCollection(array $models = []): UserCollection
{
return new UserCollection($models);
}
}
All queries on User that would result in a Collection will now result in a UserCollection.
get_class(User::all()) // UserCollection
get_class(User::where('type', '=', 'admin')->get()) // UserCollection
get_class(User::where('id', '=', 1)->first()) // User
This software is open source and licensed under the MIT license.
If you use this software in your daily development we would appreciate to receive a postcard of your hometown.
Please send it to: Webparking BV, Cypresbaan 31a, 2908 LT Capelle aan den IJssel, The Netherlands