Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Farirai's avatar

facing problems updating the status field in my blade

i have set all other fields to readonly beacause i only want to be able to update status i am using laravel and splade .when i click submit the page does not redirect anywhere this began when i added status in the update request previously i did not put status in the request and i could update all other fields but status remained the same even if i changed it

my controller

<?php

namespace App\Http\Controllers;

use App\Models\CardReplacement;
use App\Http\Requests\StoreCardReplacementRequest;
use App\Http\Requests\UpdateCardReplacementRequest;
use App\Tables\CardReplacements;
use Dompdf\Dompdf;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\View;
use ProtoneMedia\Splade\Facades\Toast;
use Spatie\QueryBuilder\AllowedFilter;
use Spatie\QueryBuilder\QueryBuilder;
use Carbon\Carbon;
class CardReplacementController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        $dateFilter = AllowedFilter::callback('date', function (
            $query,
            $value
        ) {
            $now = Carbon::now();

            if ($value === 'today') {
                $query->whereDate('created_at', $now->toDateString());
            } elseif ($value === 'this_week') {
                $query->whereBetween('created_at', [
                    $now->startOfWeek()->toDateTimeString(),
                    $now->endOfWeek()->toDateTimeString(),
                ]);
            } elseif ($value === 'this_month') {
                $query->whereBetween('created_at', [
                    $now->startOfMonth()->toDateTimeString(),
                    $now->endOfMonth()->toDateTimeString(),
                ]);
            }
        });

        $globalSearch = AllowedFilter::callback('global', function (
            $query,
            $value
        ) {
            $query->where(function ($query) use ($value) {
                Collection::wrap($value)->each(function ($value) use ($query) {
                    $query
                        ->orWhere('cardType', 'LIKE', "%{$value}%")
                        ->orWhere('accountNumber', 'LIKE', "%{$value}%")
                        ->orWhere('collectionPoint', 'LIKE', "%{$value}%")
                        ->orWhere('mobileNumber', 'LIKE', "%{$value}%");
                });
            });
        });

        $cardReplacements = QueryBuilder::for(CardReplacement::class)
            ->defaultSort('cardType')
            ->allowedFilters([
                'cardType',
                'accountNumber',
                'reason',
                'collectionPoint',
                'mobileNumber',
                'Name',
                'status',
                $globalSearch,
                $dateFilter,
            ])
            ->allowedSorts([
                'id',
                'cardType',
                'accountNumber',
                'reason',
                'collectionPoint',
                'Name',
                'mobileNumber',
            ])
            ->paginate(6)
            ->withQueryString();

        return view('cardReplacements.index', [
            'cardReplacements' => CardReplacements::class,
        ]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('cardReplacements.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(StoreCardReplacementRequest $request)
    {
        CardReplacement::create($request->validated());

        Toast::title('Card Replacement Created')
            ->message('Created Successfully')
            ->success()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(5);

        return redirect()->route('card-replacements.index');
    }

    /**
     * Display the specified resource.
     */
    public function show(CardReplacement $cardReplacement)
    {
        return view('card-replacements.show', [
            'cardReplacement' => $cardReplacement,
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(CardReplacement $cardReplacement)
    {
        return view('cardReplacements.edit', [
            'cardReplacement' => $cardReplacement,
        ]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(
        UpdateCardReplacementRequest $request,
        CardReplacement $cardReplacement
    ) {
        $cardReplacement->update($request->validated());

        Toast::title('Card Replacement Updated')
            ->message('Updated Successfully')
            ->info()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(5);

        return redirect()->route('card-replacements.index');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(CardReplacement $cardReplacement)
    {
        $cardReplacement->delete();

        Toast::title('Card Replacement deleted')
            ->message('Deleted successfully')
            ->warning()
            ->leftTop()
            ->backdrop()
            ->autoDismiss(5);

        return redirect()->route('card-replacements.index');
    }

    public function downloadPdf(CardReplacement $cardReplacement)
    {
        $pdf = new Dompdf();
        $view = View::make(
            'cardReplacements.pdf',
            compact('cardReplacement')
        )->render();

        $pdf->loadHtml($view);
        $pdf->render();

        return Response::stream(
            function () use ($pdf) {
                echo $pdf->output();
            },
            200,
            [
                'Content-Type' => 'application/pdf',
                'Content-Disposition' =>
                    'attachment; filename="card-replacement.pdf"',
            ]
        );
    }
}

my edit.blade file

<x-layout>
    <x-splade-form confirm="are you sure" :default="$cardReplacement" :action="route('card-replacements.update', $cardReplacement)" method="PUT"
        class="w-full md:w-4/12 justify-center mx-auto mt-16 space-y-4 px-5 py-5 bg-white">

        <h1 class="text-xl font-semibold text-center">Card Replacement, {{ $cardReplacement->Name }}</h1>
        <div class="grid grid-cols-2 gap-4">
            <x-splade-input name="Name" label="Name" :default="$cardReplacement->Name" readonly />
            <x-splade-input name="cardType" label="Card Type" :default="$cardReplacement->cardType" readonly />
            <x-splade-input name="accountNumber" label="Account Number" :default="$cardReplacement->accountNumber" readonly="" />
            <x-splade-input name="reason" label="Reason" :default="$cardReplacement->reason" readonly />
            <x-splade-input name="collectionPoint" label="Collection Point" :default="$cardReplacement->collectionPoint" readonly />
            <x-splade-input name="mobileNumber" label="Mobile Number" :default="$cardReplacement->mobileNumber" readonly />
            <div class="col-span-2">
                <label for="status" class="block text-sm font-medium text-gray-700">Status</label>
                <select name="status" id="status"
                    class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">
                    @foreach (\App\Enums\CardReplacementStatusEnum::getValues() as $value)
                        <option value="{{ $value }}" {{ $cardReplacement->status == $value ? 'selected' : '' }}>
                            {{ $value }}</option>
                    @endforeach
                </select>
            </div>

        </div>
        <x-splade-button type="submit"
            class="hover:bg-gray-200 hover:text-black transition w-full md:w-28 bg-gray-800 h-10 px-2 text-white font-semibold rounded font-sans">
            Submit
        </x-splade-button>

    </x-splade-form>
</x-layout>

my updateequest

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;

class UpdateCardReplacementRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            'cardType' => ['required', 'string', 'max:255'],
            'accountNumber' => ['required', 'string', 'max:255'],
            'reason' => ['required', 'string', 'max:255'],
            'collectionPoint' => ['required', 'string', 'max:255'],
            'Name' => ['required', 'string', 'max:255'],
            'mobileNumber' => ['required', 'string', 'max:255'],
            'status' => ['required', 'string', 'in:pending,approved,rejected'],
        ];
    }
}

my migration file


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('card_replacements', function (Blueprint $table) {
            $table->id();
            $table->string('cardType');
            $table->string('accountNumber');
            $table->string('reason');
            $table->string('collectionPoint');
            $table->string('mobileNumber');
            $table->string('Name');
            $table->string('status')->default('pending');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('card_replacements');
    }
};

my model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class CardReplacement extends Model
{
    use HasFactory;

    protected $fillable = [
        'cardType',
        'accountNumber',
        'reason',
        'collectionPoint',
        'mobileNumber',
        'Name',
        'status',
    ];
}

0 likes
3 replies
Snapey's avatar

if you only allow status change then use a form request that only allows contains status, then only set status in controller. Don't rely on the read only attribute

Please or to participate in this conversation.