Почему нельзя получить записи по другому столбцу, кроме идентификатора при показе действия с laravel? - PullRequest
0 голосов
/ 05 сентября 2018

Laravel версия: 5.4

Таблица категорий:

| id | blog_id |
| -- | -- |
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |

Вот маршрут:

Route::get('categories/{blog_id}', 'CategoryController@show');

В CategoryController:

public function show(Category $blog_id)
{
    return DB::table('categories')->where('blog_id', $blog_id)->get();
}

При проверке с URL:

/categories/1

sql:

select * from `categories` where `id` = '1' limit 1

Но не:

select * from `categories` where `blog_id` = '1' limit 1

Почему?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Route Model Binding принимает id как parameter. Если вы хотите использовать другой столбец вместо id, просто override метод getRouteKeyName для вашей модели Eloquent.

class Category extends Model {
    public function getRouteKeyName() {
        return 'blog_id';
    }
}

Для более подробной информации, вы можете увидеть эту ссылку.

0 голосов
/ 05 сентября 2018

Вы используете привязку модели маршрута здесь:

public function show(Category $blog_id)

Для этого требуется $blog_id, а затем он ищет Category с id $blog_id.

Если вы хотите получить все категории, используя $blog_id, просто удалите модель из объявления метода:

public function show($blog_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...