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

mohammadkhallaf's avatar

Attempt to read property "id" on null

public function store(Request $request)
    {


        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);
        $transactions = Transaction::create([
            'finance_id'=> Finance::where('id',$request->id)->first()->id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم اضافة دفعة جديدة بنجاح');
    }


0 likes
51 replies
Sinnbeck's avatar

Thought we already covered this? It cannot find any finances with the given ID

What does this give you ?

dd(Finance::where('id',$request->id)->first(), $request->id);
mohammadkhallaf's avatar

@Sinnbeck its solved thank you but what about update it doesnt work

public function update(Request $request, Transaction $transactions)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);

        $transactions ->update([
            'finance_id'=> $request->id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم التعديل بنجاح');
    }
aleahy's avatar

The field should be $request->finance_id, not $request->id

1 like
tykus's avatar

@mohammadkhallaf you have already established that the record exists (using the validation rule); so the new query is completely unnecessary. This is all you need to persist the new Transaction:

$transactions = Transaction::create([
    'finance_id'=> $request->finance_id,
    'payment' => $request->payment,
    'date' => $request->date,
    'note' => $request->note
]);
1 like
mohammadkhallaf's avatar

@tykus the problem solved but the update function doesnt work

public function update(Request $request, Transaction $transactions)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);

        $transactions ->update([
            'finance_id'=> $request->id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم التعديل بنجاح');
    }
Sinnbeck's avatar

@mohammadkhallaf You are still using `$request->id'

            'finance_id'=> $request->id, //wrong
            'finance_id'=> $request->finance_id, //fixed
tykus's avatar

@mohammadkhallaf same problem id should be finance_id

$transactions ->update([
    'finance_id'=> $request->finance_id,
    'payment' => $request->payment,
    'date' => $request->date,
    'note' => $request->note
]);
tykus's avatar

@mohammadkhallaf did you try this:

$transactions ->update([
    'finance_id'=> $request->finance_id,
    'payment' => $request->payment,
    'date' => $request->date,
    'note' => $request->note
]);

Do you actually have a Transaction instance (from the database) to work with?

mohammadkhallaf's avatar

@tykus

<?php

namespace App\Http\Controllers;

use App\Models\Finance;

use App\Models\Transaction;
use Illuminate\Http\Request;

class TransactionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $transactions = Transaction::all();
        return view('admin.transaction.index', compact('transactions'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.transaction.create');
    }


    public function store(Request $request)
    {


        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required",

        ]);
        $transactions = Transaction::create([
            'finance_id'=> Finance::where('id',$request->finance_id)->first()->id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم اضافة دفعة جديدة بنجاح');
    }



    public function edit(Transaction $transition,$id)
    {
        $transaction=Transaction::find($id);
        return view('admin.transaction.edit',compact('transaction'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\FinanceTransition  $financeTransition
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Transaction $transactions)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);

        $transactions ->update([
            'finance_id'=> $request->finance_id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم التعديل بنجاح');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\FinanceTransition  $financeTransition
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $transaction = Finance::findOrFail($id);
        $transaction->delete();
        return redirect()->route('admin.transaction')->with('message', 'تم الحذف بنجاح');
    }
}

tykus's avatar

@mohammadkhallaf your controller is a mess of contradictory variable names! I assume you have {transaction} wildcard; so make sure the parameter matches:

public function update(Request $request, Transaction $transaction)

Show the Route definition for the update action

mohammadkhallaf's avatar

@tykus

Route::put('/transaction/update/{id}', [TransactionController::class, 'update'])->name('admin.transaction.update');
tykus's avatar

@mohammadkhallaf okay, so there is no Route-Model binding because the {id} route wildcard does not match the Controller parameter $transactions; so you are getting a new Transaction instance that has no ID - therefore updating fails!

This would be a better representation of the Route and Controller

Route::put('/transaction/update/{transaction}', [TransactionController::class, 'update'])->name('admin.transaction.update');
<?php

namespace App\Http\Controllers;

use App\Models\Finance;

use App\Models\Transaction;
use Illuminate\Http\Request;

class TransactionController extends Controller
{
    public function index()
    {
        $transactions = Transaction::all();
        return view('admin.transaction.index', compact('transactions'));
    }

    public function create()
    {
        return view('admin.transaction.create');
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required",

        ]);
        $transactions = Transaction::create([
            'finance_id'=> $request->finance_id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم اضافة دفعة جديدة بنجاح');
    }

    public function edit(Transaction $transaction)
    {
        return view('admin.transaction.edit',compact('transaction'));
    }

    public function update(Request $request, Transaction $transaction)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);

        $transaction->update([
            'finance_id'=> $request->finance_id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);

        return redirect()->route('admin.transaction')->with('success', 'تم التعديل بنجاح');
    }

    public function destroy($id)
    {
      // Why are you deleting a Finance instance????
        $transaction = Finance::findOrFail($id);
        $transaction->delete();
        return redirect()->route('admin.transaction')->with('message', 'تم الحذف بنجاح');
    }
}
mohammadkhallaf's avatar

@tykus so what i should pass in edit blade

<form class="form" action="{{ route('admin.transaction.update',['id'=>$transaction->id]) }}" method="POST"
                                            enctype="multipart/form-data">
mohammadkhallaf's avatar

@tykus Missing required parameter for [Route: admin.transaction.update] [URI: transaction/update/{transaction}] [Missing parameter: transaction].

tykus's avatar

@mohammadkhallaf what? It should be like this; what do you have?

<form class="form" 
      action="{{ route('admin.transaction.update', $transaction) }}" 
      method="POST"
      enctype="multipart/form-data"
>
mohammadkhallaf's avatar

@tykus

<?php

namespace App\Http\Controllers;

use App\Models\Finance;

use App\Models\Transaction;
use Illuminate\Http\Request;

class TransactionController extends Controller
{
    public function index()
    {
        $transaction = Transaction::all();
        return view('admin.transaction.index', compact('transaction'));
    }

    public function create()
    {
        return view('admin.transaction.create');
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required",

        ]);
        $transaction = Transaction::create([
            'finance_id'=> $request->finance_id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);
        return redirect()->route('admin.transaction')->with('success', 'تم اضافة دفعة جديدة بنجاح');
    }

    public function edit(Transaction $transaction)
    {
        $transaction = Transaction::find($transaction);
        return view('admin.transaction.edit',compact('transaction'));
    }

    public function update(Request $request, Transaction $transaction)
    {
        $this->validate($request, [
            'finance_id' => "required|exists:finances,id",
            'payment' => "required|integer",
            'date' => "required|date",

        ]);

        $transaction->update([
            'finance_id'=> $request->finance_id,
            'payment' => $request->payment,
            'date' => $request->date,
            'note' => $request->note
        ]);

        return redirect()->route('admin.transaction')->with('success', 'تم التعديل بنجاح');
    }

    public function destroy($id)
    {
      // Why are you deleting a Finance instance????
        $transaction = Transaction::findOrFail($id);
        $transaction->delete();
        return redirect()->route('admin.transaction')->with('message', 'تم الحذف بنجاح');
    }
}

mohammadkhallaf's avatar
  <div class="form-group">
                                                            <label for="projectinput1">رقم المالية  </label>
                                                            <input type="text" value="{{$transaction->finance_id}}" id="finance_id"
                                                                class="form-control"
                                                                name="finance_id">
                                                            @error('finance_id')
                                                                <span class="text-danger">{{ $message }}</span>
                                                            @enderror
                                                        </div>
tykus's avatar

@mohammadkhallaf where is this view code?

EDIT never mind, I think I see the problem; show me the Route for the edit action.

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.transaction.update',$transaction) }}" 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="{{$transaction->finance_id}}" id="finance_id"
                                                                class="form-control"
                                                                name="finance_id">
                                                            @error('finance_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="{{$transaction->payment}}" id="payment"
                                                                class="form-control"
                                                                name="payment">
                                                            @error('payment')
                                                                <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="date" value="{{$transaction->date}}" id="date"
                                                                class="form-control"
                                                                name="date">
                                                            @error('date')
                                                                <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="{{$transaction->note}}" id="note"
                                                                class="form-control"
                                                                name="note">
                                                            @error('note')
                                                                <span class="text-danger">{{ $message }} </span>
                                                            @enderror
                                                        </div>
                                                    </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.transaction')}}"> <button type="button" class="btn btn-warning " >
                                            المالية
                                            </button></a>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
            </div>
        </div>
        </section>
    </div>
    </div>
    </div>
@endsection
@section('scripts')
@endsection

mohammadkhallaf's avatar

@tykus

Route::get('/transaction/edit/{id}', [TransactionController::class, 'edit'])->name('admin.transaction.edit');
tykus's avatar

@mohammadkhallaf again; let's utilise Route Model Binding:

Route::get('/transaction/edit/{transaction}', [TransactionController::class, 'edit'])->name('admin.transaction.edit');
public function edit(Transaction $transaction)
{
    return view('admin.transaction.edit',compact('transaction'));
}
mohammadkhallaf's avatar

@tykus Missing required parameters for [Route: admin.transaction.edit] [URI: transaction/edit/{transaction}] [Missing parameters: "id":1,"finance_id":1,"payment":100,"date":"2022-11-22","note":null,"created_at":"2022-11-10T11:17:28.000000Z","updated_at":"2022-11-10T11:17:28.000000Z", "id":2,"finance_id":1,"payment":100,"date":"2022-11-14","note":null,"created_at":"2022-11-10T11:44:46.000000Z","updated_at":"2022-11-10T11:44:46.000000Z", "id":3,"finance_id":1,"payment":500,"date":"2022-11-18","note":null,"created_at":"2022-11-10T11:47:01.000000Z","updated_at":"2022-11-10T12:44:26.000000Z"].

tykus's avatar

@mohammadkhallaf this is yet another different problem; show me how the link to the edit page is being created, e.g.

<a href="{{ route('admin.transaction.edit' // ...
mohammadkhallaf's avatar

@tykus

    <a href="{{ route('admin.transaction.edit', $transaction) }}" class="btn btn-primary btn-sm"
                            id="edit"><i class="fa fa-edit"></i></a>
tykus's avatar

@mohammadkhallaf it should work with the Model instance????

Try this:

<a href="{{ route('admin.transaction.edit', $transaction->id) }}"
   class="btn btn-primary btn-sm" 
   id="edit"
>
tykus's avatar

@mohammadkhallaf FFS. Why is $transaction a Collection again here? What page are we on here; how is $transaction being assigned?

tykus's avatar
tykus
Best Answer
Level 104

@mohammadkhallaf you are not iterating over the $transaction Collection in the view.

First, lets fix the variable name - plural because there are multiple Transaction records:

    public function index()
    {
        $transactions = Transaction::all();
        return view('admin.transaction.index', compact('transactions'));
    }

Then in the view; you loop over the Collection of $transactions

@foreach ($transactions as $transaction)
    <!-- your markup incl this link->
    <a href="{{ route('admin.transaction.edit', $transaction) }}"
       class="btn btn-primary btn-sm" 
       id="edit"
    >
@endforeach
mohammadkhallaf's avatar

@tykus pro do you have any idea to substract variable value from another variable value in othe table

JussiMannisto's avatar

The error message tells you what is wrong and also what the exact line is. You're trying to access the id property of an object that is null. In this case it's the Finance model that you're trying to retrieve.

You're checking that the model exists in validation using the parameter named finance_id, but you're finding the model using a different parameter, $request->id. You should use either $request->finance_id or $request->input('finance_id').

1 like

Please or to participate in this conversation.