Skip to content

youmdingding/laravel-9-new-features

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

laravel-9-new-features

Controller Route Groups

Laravel 8.x

Route::group(['prefix' => '/seeds-transactions'], function () {
    Route::post('/', [SeedsTransactionsController::class, 'store']);
    Route::put('/{seeds_transaction}', [SeedsTransactionsController::class, 'update']);
    Route::delete('/{seeds_transaction}', [SeedsTransactionsController::class, 'destroy']);
});

Laravel 9.x

Route::controller(SeedsTransactionsController::class)->group(function() {
  Route::post('/seeds-transactions', 'store');
  Route::put('/seeds-transactions/{seeds_transaction}', 'update');
  Route::delete('/seeds-transactions/{seeds_transaction}', 'destroy');
}

Anonymous Migration Class

Laravel 8.x

class CreateUsersTable extends Migration {
[...]
}

Laravel 9.x

return new class extends Migration {
[...]
}

Forced Scoped Bindings

User.php
public function licences() {
  return $this->hasMany(Licence::class);
}

Laravel 8.x

Route::get('/users/{user}/licences/{licence:id}', 'show');

Laravel 9.x

Route::get('/users/{user}/licences/{licence}', 'show')->scopeBindings();

Test Coverage

Requires XDebug with XDebug coverage mode enabled

Laravel 8.x

php artisan test

php artisan test

Laravel 9.x

XDEBUG_MODE=coverage php artisan test --coverage --min=80

php artisan test coverage min

Full Text Indexing

Laravel 8.x

Migration
$table->text('licence_notes');

Controller
Licence::whereLike('licence_notes', 'LIKE', '%text%');

Laravel 9.x

Migration
$table->text('licence_notes')->fulltext(); //Creates FULLTEXT index in MySQL table

Controller
Licence::whereFullText('licence_notes', '%text%'); //Uses MySQL MATCH AGAINST functionality 

Enum Attribute Casting

Laravel 8.x

Enum
final class LicenceStatus extends Enum {
    const Expired = 'Expired';
    const Active = 'Active';
}

Migration
$table->enum('licence_status', [LicenceStatus::Active, LicenceStatus::Expired]);

Laravel 9.x

Enum
enum LicenceStatus:string {
    case Expired = 'Expired';
    case Active = 'Active';
}

Migration
$table->string('licence_status')->default('active');

Model
protected $casts = ['licence_status' => LicenceStatus::class]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published