remarkablemark / rector-laravel-database-expressions
Rector to fix Laravel 10 database expressions
Fund package maintenance!
remarkablemark
Patreon
Ko Fi
Liberapay
b.remarkabl.org/teespring
Requires
- php: >=8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: 3.50.0
- phpunit/phpunit: 10.5.11
- rector/rector: 0.19.1
- symplify/rule-doc-generator: 12.1.1
This package is auto-updated.
Last update: 2024-11-11 02:45:43 UTC
README
Rector to refactor Laravel 10 database expressions.
From Laravel 10:
Database "expressions" (typically generated via
DB::raw
) have been rewritten in Laravel 10.x to offer additional functionality in the future. Notably, the grammar's raw string value must now be retrieved via the expression'sgetValue(Grammar $grammar)
method. Casting an expression to a string using(string)
is no longer supported.If your application is manually casting database expressions to strings using
(string)
or invoking the__toString
method on the expression directly, you should update your code to invoke thegetValue
method instead:use Illuminate\Support\Facades\DB; $expression = DB::raw('select 1'); $string = $expression->getValue(DB::connection()->getQueryGrammar());
Requirements
PHP >=8.0
Install
Install with Composer:
composer require --dev rector/rector remarkablemark/rector-laravel-database-expressions
Usage
Register rule in rector.php
:
<?php declare(strict_types=1); use Rector\Config\RectorConfig; use Remarkablemark\RectorLaravelDatabaseExpressions\LaravelDatabaseExpressionsRector; return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ __DIR__ . '/app', __DIR__ . '/bootstrap', __DIR__ . '/config', __DIR__ . '/database', __DIR__ . '/public', __DIR__ . '/resources', __DIR__ . '/routes', __DIR__ . '/storage', __DIR__ . '/tests', ]); $rectorConfig->rule(LaravelDatabaseExpressionsRector::class); };
See the diff:
vendor/bin/rector process --dry-run
Apply the rule:
vendor/bin/rector process
Clear the cache and apply the rule:
vendor/bin/rector process --clear-cache
Rule
Before
DB::select(DB::raw('select 1'));
After
DB::select('select 1');