2
votes

I am using Laravel/Passport and already can get data by id:

api.php/Controller.php

Route::get('members/{member}', 'MemberController@show');

public function show(Member $member)
{
    return $member;
}

This just return all data by id, now I want to get member by phone number, so I created:

Route::get('members/{phone}', 'MemberController@phone');

public function phone(Member $member)
{
    return $member;
}

Error:

exception: "Symfony\Component\HttpKernel\Exception\NotFoundHttpException" file: "C:\Users\xx\xx\xx\xx\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php" line: 204 message: "No query results for model [App\Member] 2929292222"

1

1 Answers

2
votes

route

Route::get('members/{phone}', 'MemberController@phone');

controller

public function phone(Member $member)
{
    return $member;
}

Go to Member.php model and add this method getRouteKeyName

public function getRouteKeyName()
{
  return 'phone';
}

Laravel by default it will automatically inject the model instance that has an ID matching the corresponding value from the request URI.

If you would like model binding to use a database column other than id when retrieving a given model class, you may override the getRouteKeyName method on the Eloquent model:

for more information check the documentation