Передайте две переменные методу в Laravel - PullRequest
3 голосов
/ 17 февраля 2020

Я хочу найти сообщение по slug также в URL ... но комментарии должны быть найдены по post_id

Контроллер

public function post($slug,$id)
{
    $post = Post::where('slug',$slug)->first();
    $comments = Comment::where('post_id',$id)->get();
    return view('content.post',compact('post','comments'));
}

Маршрут

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

Ответы [ 5 ]

2 голосов
/ 17 февраля 2020
Route::get('post/{slug}', 'PagesController@post')->name('post.show');
public function post($slug)
{
    $post = Post::where('slug',$slug)->first();
    $comments = Comment::where('post_id',$post->id)->get();
    return view('content.post',compact('post','comments'));
}
0 голосов
/ 17 февраля 2020

Вы можете использовать Привязка модели маршрута , чтобы маршруты находили вашу модель на основе предоставленного ключа.

Для вашей модели Post потребуется добавить следующий метод:

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

Затем в ваших маршрутах вы можете просто ссылаться на модель напрямую, и привязка произойдет автоматически:

public function post(App\Post $post)
{
    $comments = Comment::where('post_id',$post->id)->get();
    return view('content.post',compact('post','comments'));
}

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

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

Теперь, кроме того, чтобы упростить вашу ссылку на комментарии, добавьте их как отношения к вашей Post модели:

public function comments() 
{
    return $this->hasMany(Comment::class);
}

и вашей Comment модели:

public function post()
{
    return $this->belongsTo(Post::class);
}

Это позволит вам еще больше сократить метод управления:

public function post(App\Post $post)
{
    return view('content.post',compact('post'));
}

и вместо этого в режиме Blade сделайте следующее:

@foreach($post->comments as $comment)
From: {{ $comment->name }} blah blha
@endforeach
0 голосов
/ 17 февраля 2020

в сети. php:

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

в контроллере:

public function post($slug)
{
    $post = Post::where('slug',$slug)->first();
    $comments = Comment::where('post_id',$post->id)->get(); //use founded_post_id to find it's comments
    return view('content.post',compact('post','comments'));
}
0 голосов
/ 17 февраля 2020

ПОПРОБУЙТЕ

public function post($slug)
{
    $post = Post::where('slug',$slug)->first();
    $comments = Comment::where('post_id',$post->id)->get();
    return view('content.post',compact('post','comments'));
}
0 голосов
/ 17 февраля 2020

Здесь вы go:

Получите post_id от самого $post.

public function post($slug){
    $post = Post::where('slug',$slug)->first();
    $comments = Comment::where('post_id',$post->id)->get();
    ...
}
...