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

mohammadkhallaf's avatar

Undefined variable $finance

  <form class="form" action="{{ route('admin.finance.update',['id'=>$finances->id]) }}" method="POST"
             enctype="multipart/form-data">
                       @csrf
                  @method('PUT')
   public function update(Request $request, Finance $finance,$id)
    {
        $this->validate($request, [
            'personal_id' => 'required|exists:customers,personal_id',
            'test_id' => 'required|exists:tests,id',
            'amount' => 'required|integer',
            'date' => 'required'
        ]);
        $finances = Finance::create([
            'customer_id' => $request->customer->id,
            'test_id' => $request->test_id,
            'date' => $request->date,
            'amount' => $request->amount,
            'remaining' => $request->amount ,
            'note' => $request->note
        ]);
        return redirect()->back()->with('success', 'تم تحديث معلومات مالية جديدة');
    }
0 likes
21 replies
tykus's avatar

Is the problem in the view or in the Controller? Your code is quite confused; you are creating a record in an update method; we would typically use the store method; which does not need an existing ID:

<form class="form" action="{{ route('admin.finance.store') }}" method="POST">
public function store(Request $request)

There is no file uploaded (based on the validation rules), so the enctype attribute is unnecessary; also the @method('PUT') is unnecessary if you use the convention store` action:

Why are you expecting a Finance $finance parameter and $id in the update method??? If you are Route-Model Binding, then

Route::put('/finances/{finance}, [FinanceController::class, 'update'])->name('admin.finance.update');
public function update(Request $request, Finance $finance)
mohammadkhallaf's avatar

@tykus

public function update(Request $request,Finance $finances)
    {
        $this->validate($request, [
            'personal_id' => 'required|exists:customers,personal_id',
            'test_id' => 'required|exists:tests,id',
            'amount' => 'required|integer',
            'date' => 'required'
        ]);
        $finances ->update([
            'customer_id' => $request->customer->id,
            'test_id' => $request->test_id,
            'date' => $request->date,
            'amount' => $request->amount,
            'remaining' => $request->amount ,
            'note' => $request->note
        ]);
        return redirect()->back()->with('success', 'تم تحديث معلومات مالية جديدة');
    }

tykus's avatar

@mohammadkhallaf okay, but you were originally showing code to create an instance. Now that you've changed it, what is happening?

tykus's avatar

@mohammadkhallaf it doesn't work is about as useless a statement as anyone can make here... how doesn't it work, what does it do?

tykus's avatar

@mohammadkhallaf the code looks fine; assuming you can reach that Controller action! Are you getting an error?

tykus's avatar

@mohammadkhallaf so the error does not relate to the update method!

What the the edit controller action look like; and show me the complete Blade template with the form

mohammadkhallaf's avatar

@tykus

@extends('layouts.master')
@section('title')
    تعديل مالية
@endsection
@section('css')
@endsection
@section('title_page1')
تعديل مالية
@endsection
@section('title_page2')
    لوحة التحكم
@endsection
@section('content')
    <div class="app-content ">
        <div class="content text-right">
            <div class="content-header row text-center">
                <div class="content-header-left col-md-6 col-12 mb-2">

                </div>
            </div>
            <div class="content-body">
                <!-- Basic form layout section start -->
                <section id="basic-form-layouts" dir="rtl">
                    <div class="row match-height">
                        <div class="col-md-12  ">
                            <div class="card ">
                                <div class="card-header text-center">
                                    <h4 class="card-title text-center" id="basic-layout-form"> تعديل مالية  </h4>
                                    <a class="heading-elements-toggle"><i class="la la-ellipsis-v font-medium-3"></i></a>
                                    <div class="heading-elements">
                                        <ul class="list-inline mb-0">
                                            <li><a data-action="collapse"><i class="ft-minus"></i></a></li>
                                            <li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
                                            <li><a data-action="expand"><i class="ft-maximize"></i></a></li>
                                            <li><a data-action="close"><i class="ft-x"></i></a></li>
                                        </ul>
                                    </div>
                                </div>
                                <div class="card-content collapse show">
                                    <div class="card-body">
                                        <form class="form" action="{{ route('admin.finance.update',['id'=>$finance->id]) }}" method="POST"
                                            enctype="multipart/form-data">
                                            @csrf
                                            @method('PUT')
                                            <div class="form-body">
                                                <h4 class="form-section"><i class="ft-home"></i> بيانات المالية </h4>
                                                <div class="row">
                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label for="projectinput1">رقم الهوية  </label>
                                                            <input type="text" value="{{$finance->personal_id}}" id="personal_id"
                                                                class="form-control"
                                                                name="personal_id">
                                                            @error('personal_id')
                                                                <span class="text-danger">{{ $message }}</span>
                                                            @enderror
                                                        </div>
                                                    </div>

                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label for="projectinput1">رقم الفحص</label>
                                                            <input type="text" value="{{$finance->test_id}}" id="test_id"
                                                                class="form-control"
                                                                name="test_id">
                                                            @error('test_id')
                                                                <span class="text-danger">{{ $message }} </span>
                                                            @enderror
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="row">
                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label for="projectinput1">المبلغ </label>
                                                            <input type="text" value="{{$finance->amount}}" id="amount"
                                                                class="form-control"
                                                                name="amount">
                                                            @error('amount')
                                                                <span class="text-danger">{{ $message }}</span>
                                                            @enderror
                                                        </div>
                                                    </div>

                                                    <div class="col-md-6">
                                                        <div class="form-group">
                                                            <label for="projectinput1">التاريخ </label>
                                                            <input type="date" value="{{$finance->date}}" id="date"
                                                                class="form-control"
                                                                name="date">
                                                            @error('date')
                                                                <span class="text-danger">{{ $message }} </span>
                                                            @enderror
                                                        </div>
                                                    </div> </div>
                                            </div>
                                            <div class="row">

                                                <div class="col-md-6">
                                                    <div class="form-group">
                                                        <label for="projectinput1">ملاحظات </label>
                                                        <input type="text" value="{{$finance->note}}" id="note"
                                                            class="form-control"
                                                            name="note">
                                                        @error('note')
                                                            <span class="text-danger">{{ $message }} </span>
                                                        @enderror
                                                    </div>
                                                </div>
                                            </div>


                                </div>
                                    <div class="form-actions">

                                        <button type="submit" class="btn btn-primary">
                                            <i class="la la-check-square-o"></i> تعديل
                                        </button>
                                        <a href="{{route('admin.finance')}}"> <button type="button" class="btn btn-warning " >
                                            المالية
                                            </button></a>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
            </div>
        </div>
        </section>
    </div>
    </div>
    </div>
@endsection
@section('scripts')
@endsection
 public function edit(Finance $finance,$id)
    {
        $finance = Finance::find($id);
        return view('admin.finance.edit');
    }
tykus's avatar
tykus
Best Answer
Level 104

@mohammadkhallaf you must pass the data to the view; like this:

 public function edit(Finance $finance,$id)
{
    $finance = Finance::find($id);
    return view('admin.finance.edit', compact('finance'));
}
jaseofspades88's avatar

Based on the snippets you have shared, the following is unnecessary as these variables aren't used in your controller function. public function update(Request $request, Finance $finance,$id) ...and you can simply use the following... public function update(Request $request)

wagnerfnds's avatar

The error occurs when you submit the form or when you show the form?

Please or to participate in this conversation.