Generics Added to Eloquent Builder in Laravel 11.15
Published on by Paul Redmond
The Laravel team released v11.15 this week, which includes improvements to the make:mail
command, support for setting mime types on attachments with Resend, database migration updates, and more.
Add Generics to Eloquent Builder and Relations
Caleb White contributed integrating relation generics into the Laravel framework:
Generics provide better auto-completion and intellisense in the ide without having to rely on Larastan to add generics to the classes through the use of stubs. Having generics in the framework also makes it easier for third party packages to define the inner types on their custom relations.
Caleb has been contributing to Larastan and is now integrating this into the framework, improving static analysis in Laravel! See Pull Request #51851 for more details.
make:mail
Prompt for Creating a View with Christoph Rumpel contributed an update to the make:mail
command that prompts the user for the type of view they'd like to create:
Router
Tappable
Make Muhammed Sari added the Tappable
trait to the Router
class, allowing you do write something like the following:
class RouteRegistrar{ public function __invoke(Router $router) { $router->post('redacted', WebhookController::class) ->name('redacted'); }} $router ->tap(new Redacted1Webhooks\RouteRegistrar()) ->tap(new Redacted2Webhooks\RouteRegistrar())// ...; // In tests...protected function defineRoutes($router){ $router->tap(new \RedactedWebhooks\RouteRegistrar());}
Updates to Database Migrations
Hafez Divandari contributed updates to database migrations around SQLite and other quality-of-life improvements. In summary, Pull Request #51373 introduces the following updates:
- Extend SQLite support to 3.26+
- Add and Drop Foreign Keys on SQLite
- Add and Drop the primary key on SQLite
- Preserve the order of commands
- Blueprint State for SQLite
Support for MIME Types in Resend Mail Transport
Jayan Ratna contributed support for setting mime types on attachments inside a Resend mailable class. This PR adds the withMime()
method, which is demonstrated in the pull request as follows:
public function attachments(): array{ return [ Attachment::fromPath('/path/to/file') ->as('name.pdf') ->withMime('application/pdf'), ];}
Release notes
You can see the complete list of new features and updates below and the diff between 11.14.0 and 11.15.0 on GitHub. The following release notes are directly from the changelog:
v11.15.0
- [10.x] Set previous exception on
HttpResponseException
by @hafezdivandari in https://github.com/laravel/framework/pull/51986 - [11.x] feat: add generics to Eloquent Builder and Relations by @calebdw in https://github.com/laravel/framework/pull/51851
- add phpstan assertions to Collection isEmpty and isNotEmpty by @johanrosenson in https://github.com/laravel/framework/pull/51998
- [11.x] Add support for mime types in Resend mail transport by @jayanratna in https://github.com/laravel/framework/pull/52006
- [11.x] feat: add virtual methods to SoftDeletes trait by @calebdw in https://github.com/laravel/framework/pull/52001
- [11.x] Fix service container docblock by @seriquynh in https://github.com/laravel/framework/pull/52000
- [10.x] Fix Http::retry so that throw is respected for call signature Http::retry([1,2], throw: false) by @paulyoungnb in https://github.com/laravel/framework/pull/52002
- [10.x] Set application_name and character set as PostgreSQL DSN string by @sunaoka in https://github.com/laravel/framework/pull/51985
- [11.x] Fix GeneratorCommand docblock by @seriquynh in https://github.com/laravel/framework/pull/52014
- [11.x] Enhance database migrations by @hafezdivandari in https://github.com/laravel/framework/pull/51373
- [11.x] Run MySQL 9 Database Integration Tests nightly by @Jubeki in https://github.com/laravel/framework/pull/52027
- [11.x] Enhance doc blocks of the Migrator class by @imanghafoori1 in https://github.com/laravel/framework/pull/52033
- [11.x] Use nullsafe operator for event dispatcher by @seriquynh in https://github.com/laravel/framework/pull/52024
- [11.x] Fix PasswordBroker constructor docblock by @seriquynh in https://github.com/laravel/framework/pull/52023
- [11.x] Add test
testMultiplyIsLazy
to ensure LazyCollection'smultiply
method's lazy behaviour by @lmottasin in https://github.com/laravel/framework/pull/52020 - [11.x] Allow
MultipleInstanceManager
to have studly creators by @cosmastech in https://github.com/laravel/framework/pull/52030 - [11.x] Adds
$config
property toMultipleInstanceManager
by @cosmastech in https://github.com/laravel/framework/pull/52028 - [11.x] fix: findOr and firstOr generics by @calebdw in https://github.com/laravel/framework/pull/52037
- [11.x] Make
Router
Tappable
by @mabdullahsari in https://github.com/laravel/framework/pull/52051 - [11.x] feat: improve Factory generics, add generics to HasFactory by @calebdw in https://github.com/laravel/framework/pull/52005
- [11.x] Ask About View Next To Name For Create Mail Command by @christophrumpel in https://github.com/laravel/framework/pull/52057
- [11.x] Added @throws docblock for
block
method forLockTimeoutException
by @siarheipashkevich in https://github.com/laravel/framework/pull/52063