Как получить результат в Laravel с предложением where при передаче модели в методе контроллера - PullRequest
0 голосов
/ 09 января 2020

У меня есть маршрут для получения одного элемента сообщения по слагу.

Маршрут

Route::get('post/{post}', 'PostController@details')->name('post.details');

Пока я хочу передать модель в методе контроллера для маршрута.

Контроллер

public function details(Post $post)
{
    // how to get the post by slug
}

Мой вопрос Как мне получить сообщение, передавая по маршруту слаг, а не идентификатор сообщения?

Мне известно, что я могу передать слаг и получить сообщение, используя предложение where.

//Route
Route::get('post/{slug}', 'PostController@details')->name('post.details');

//Controller method
public function details($slug)
{
    $post = Post::with('slug', $slug)->first();
}

Но я хочу научиться делать то же самое, передав Модель в методе.

Ответы [ 2 ]

1 голос
/ 09 января 2020

То, что вы хотите сделать, это неявная привязка модели маршрута

Что вы можете сделать, это определить в своей модели Post getRouteKeyName, как показано ниже

<?php

class Post extends Model
{
    /**
     * Get the route key for the model.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }
}

и определите свой маршрут следующим образом:

Route::get('post/{post:slug}', 'PostController@details')->name('post.details');

и затем в вашем контроллере

public function details(Post $post)
{
    // it will return post with slug name
    return $post;
}

Надеюсь, это поможет.

Спасибо

1 голос
/ 09 января 2020

установить имя ключа маршрута для класса вашей модели

//Post.php
public function getRouteKeyName()
{
    return 'slug';
}

Это сообщит Laravel инжектору / преобразователю о необходимости поиска переменной, переданной в столбце slug, при извлечении экземпляра объекта.

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