fightstarr20
fightstarr20

Reputation: 12598

Laravel 5.5 - Handle Error Exception for 'where'

In Laravel 5.5 I am trying to handle an error exception like this...

        try {
            $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
        }

        catch(ModelNotFoundException $e) {

            return Response::json(array(
                'error' => true,
                'status_code' => 400,
                'response' => 'fruit_id not found',
            ));

        }

But this is giving me a 'Trying to get propert of non-object' error

The same error handling works correctly for findorfail, how should I be doing this for the 'where' statement?

Upvotes: 0

Views: 569

Answers (5)

benjamintemitope
benjamintemitope

Reputation: 388

Tested on Laravel 5.7

try {
    $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
}

catch(\Exception $e) {

    abort(404);

}

Upvotes: 1

Pooja Yengandul
Pooja Yengandul

Reputation: 41

I think you are passing wrong values in your where query in the try block.

try {
      $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
    }

Is it fruit_id or just id because you are querying it on fruit model itself.

Upvotes: 2

Prashant Prajapati
Prashant Prajapati

Reputation: 1015

Try the below code:

if ($user->fruit) {
    try {
        $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
    } catch(\Exception $e) {
        return Response::json(array(
            'error' => true,
            'status_code' => 400,
            'response' => 'fruit_id not found',
        ));
    }
} else {
    return "User Fruit doesn't exists!!";
}

Upvotes: -1

user320487
user320487

Reputation:

Even though you got it working, I'd like to make mention of Laravel's Exception Handler.

The report method allows you to catch any exception type and customize how you wish to process and move forward. There is a report helper function as well which is globally accessible.

Furthermore, reportable and renderable exceptions allow you to create and customize your responses.

Upvotes: 0

fightstarr20
fightstarr20

Reputation: 12598

Thanks to some pointers in the comments I changed to

  try {
        $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
    }

    catch(\Exception $e) {

        return Response::json(array(
            'error' => true,
            'status_code' => 400,
            'response' => 'fruit_id not found',
        ));

    }

All is now working now I am catching the correct exception

Upvotes: 1

Related Questions