Передайте две переменные методу в Laravel
Я хочу найти сообщение по 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 ответов
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'));
}
Ну вот:
Получить post_id
от $post
сам.
public function post($slug){
$post = Post::where('slug',$slug)->first();
$comments = Comment::where('post_id',$post->id)->get();
...
}
ПОПРОБУЙ ЭТО
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'));
}
В web.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'));
}
Вы можете использовать привязку модели маршрута, чтобы гарантировать, что маршруты найдут вашу модель на основе предоставленного ключа.
Твой 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