Try Rector
Docs
Hire Team
Find Rule
Blog
Contact
AST
Try Rector
Docs
Hire Team
Find Rule
Blog
Contact
AST
Run Rector on your code to see what it can do for you:
// no change
PHP snippet to change
<?php declare(strict_types=1); namespace Modules\Carriers\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Database\Query\Builder; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\ResourceCollection; use Illuminate\Support\Facades\DB; use Modules\Carriers\Models\Carrier; use Modules\Carriers\Transformers\CarrierLoadHistoryResource; class CarrierLoadHistoryController extends Controller { public function __invoke(Request $request, Carrier $carrier): ResourceCollection { $perPage = $request->input('size', 50); $sortField = $request->input('sort_field', 'loads.created_at'); $sortDir = $request->input('sort_dir', 'desc'); $filter = $request->input('filter'); $carrierLoadHistory = DB::table('loads') ->select([ 'loads.id', 'loads.po_number', 'customer_shipment.customer_po', 'loads.eta_status', 'loads.total_pay_carrier_amount', 'loads.total_pay_carrier_currency', 'loads.route_completed_at', 'loads.created_at', 'users.name as owner_name', 'lanes.start_region', 'lanes.end_region', 'contact_names_temp_table.names as driver_names', 'customer_names_temp_table.names as customer_names', DB::raw('(SELECT count(*) FROM claims WHERE claims.load_id = loads.id) as claims'), ]) ->join('carrier_load', 'loads.id', '=', 'carrier_load.load_id') ->join('customer_shipment', 'loads.parent_shipment_id', '=', 'customer_shipment.shipment_id') ->join('lanes', 'loads.id', '=', 'lanes.load_id') ->leftJoin('users', 'loads.owned_by', '=', 'users.id') ->joinSub($this->getContactNamesQuery(), 'contact_names_temp_table', function ($join): void { $join->on('loads.id', '=', 'contact_names_temp_table.load_id'); }) ->joinSub($this->getCustomerNamesQuery(), 'customer_names_temp_table', function ($join): void { $join->on('loads.parent_shipment_id', '=', 'customer_names_temp_table.shipment_id'); }) ->where('carrier_load.carrier_id', $carrier->id) ->when($filter, function ($query, $search): void { $query->where(function (\Illuminate\Contracts\Database\Query\Builder $subQuery) use ($search): void { $subQuery->whereAny([ 'loads.po_number', 'customer_shipment.customer_po', 'loads.eta_status', 'users.name', 'lanes.start_region', 'lanes.end_region', 'contact_names_temp_table.names', 'customer_names_temp_table.names', ], 'ILIKE', "%{$search}%") ->orWhereRaw("CAST(CAST(loads.total_pay_carrier_amount AS DECIMAL) / 100 AS TEXT) ILIKE '%{$search}%'") ->orWhereRaw("CAST(loads.created_at AS TEXT) ILIKE '%{$search}%'") ->orWhereRaw("CAST(loads.route_completed_at AS TEXT) ILIKE '%{$search}%'"); }); }) ->orderBy($sortField, $sortDir) ->paginate($perPage); return CarrierLoadHistoryResource::collection($carrierLoadHistory) ->additional([ 'last_page' => $carrierLoadHistory->lastPage(), ]); } private function getContactNamesQuery(): Builder { return DB::table('contact_load') ->join('contacts', 'contact_load.contact_id', '=', 'contacts.id') ->select('contact_load.load_id', DB::raw("string_agg(contacts.name::text, ', '::text) as names")) ->whereIn('contact_load.role', ['driver', 'driver2']) ->groupBy('contact_load.load_id'); } private function getCustomerNamesQuery(): Builder { return DB::table('customer_shipment') ->join('customers', 'customer_shipment.customer_id', '=', 'customers.id') ->select('customer_shipment.shipment_id', DB::raw("string_agg(customers.name::text, ', '::text) as names")) ->groupBy('customer_shipment.shipment_id'); } }
Config
rector.php
<?php use Rector\Config\RectorConfig; use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector; use Rector\ValueObject\PhpVersion; use RectorLaravel\Rector\MethodCall\EloquentWhereRelationTypeHintingParameterRector; return RectorConfig::configure() ->withImportNames() ->withRules([EloquentWhereRelationTypeHintingParameterRector::class]);
Run Rector
Rector version:
83a4a1
- released at 2026-04-04 14:48