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

karimali1337's avatar

Laravel Query Condition

I've show method in controller that gets some status from the log table,Problem is sometimes this status didn't created yet so it give me Attempt to read property "user" on null so any idea how can i make condition on it to be !=null

    public function show($id)
    {
        $status = Log::where('permit_id', $id)->orderBy('id', 'DESC')->latest()->first()->status;
        $OGSign = Log::where('status', 'pa-init')->where('permit_id', $id)->latest()->first()->user->name;
        $GuadSign = Log::where('status', 'guard-a')->where('permit_id', $id)->latest()->first()->user->name;
        return view('permit.show', compact('OGSign', 'GuadSign'));
    }

When i create the report log status is pa-init so its never be null but when i use show and the status of OGSign didn't created yet it gives Attemp to read on null so how i make conidition on the query

0 likes
13 replies
Tray2's avatar

You can use isset()

@if(isset($variable))
  {{ $variable->title }}
@endif
karimali1337's avatar

@Tray2 i've tried this way but it makes another problem that i'm returning like that

        return view('permit.show', compact('permit', 'status', 'attachement', 'lives', 'OGSign', 'GuardSign'));

so its giving me an error

compact(): Undefined variable $GuardSign
Sergiu17's avatar
Sergiu17
Best Answer
Level 60

try with null safe operator

$GuadSign = Log::where('status', 'guard-a')->where('permit_id', $id)->latest()->first()->user?->name;

// blade
{{ $GuadSign ?? 'N/A' }}
1 like
Tray2's avatar

@karimali1337 That is because your call it GaudSign when you assign it.

$GuadSign = Log::where('status', 'guard-a')->where('permit_id', $id)->latest()->first()->user->name;
2 likes
karimali1337's avatar

@Tray2 i've found this also but still gives

compact(): Undefined variable $GuardSign

here's the new code

    public function show($id)
    {

        $status = Log::where('permit_id', $id)->orderBy('id', 'DESC')->latest()->first()->status;
        $OGSign = Log::where('status', 'pa-init')->where('permit_id', $id)->latest()->first()->user->name;
        if (isset($GuardSign)) {
            $GuardSign = Log::where('status', 'guard-a')->where('permit_id', $id)->latest();
        }

        $permit = Permit::findOrFail($id);
        $attachement = Attachement::all();
        return view('permit.show', compact('permit', 'status', 'OGSign', 'GuardSign'));
    }
karimali1337's avatar

@Sergiu17 Thank you i've made a small thing but its working now

$GuadSign = Log::where('status', 'guard-a')->where('permit_id', $id)->first();
// blade
{{ $GuadSign->user->name ?? 'N/A' }}

Please or to participate in this conversation.