Laravel 5: как я могу получить и отобразить все сообщения, относящиеся к определенной категории

У меня 3 таблицы

user: id, username subreddits: id, name, created_at posts: id, title, link, user_id, subreddit_id 

Проблема в том, что я извлекаю идентификатор subreddit / category вручную, в то время как мне нужно получать его динамически. Как я могу это достичь?

Это метод show() в SubredditController.php

 public function show(Subreddit $subreddit) { $posts = Subreddit::findOrFail(3)->posts()->get(); return view('subreddit/show')->with('subreddit', $subreddit) ->with('posts', $posts); } 

И это Subreddit Model

 class Subreddit extends Model { protected $fillable = [ 'name', 'description' ]; public function user() { return $this->belongsTo('App\User'); } public function posts() { return $this->hasMany('App\Post'); } } 

routes.php

 Route::resource('subreddit', 'SubredditController'); Route::resource('posts', 'PostsController'); 

RouteServiceProvider.php

 $router->model('articles', 'App\Article'); $router->model('subreddit', 'App\Subreddit'); $router->model('posts', 'App\Post'); 

Когда вы используете привязку модели маршрута, Laravel автоматически извлекает объект для $ id, предоставленного в URI, который затем может быть введен в ваш метод в качестве аргумента с использованием инъекции зависимостей.

 public function show(Subreddit $subreddit){ ... } 

Вы можете получить доступ к данным, как к любому объекту. Например, для доступа к идентификатору записи вы можете использовать $subreddit->id .

 public function show(Subreddit $subreddit) { $posts = Subreddit::findOrFail($subreddit->id)->posts()->get(); return view('subreddit/show')->with('subreddit', $subreddit) ->with('posts', $posts); } 

Я довольно новичок в Laravel, но думаю, вам нужно определить маршрут с параметрами (извините, если я неправильно понял ваш вопрос).

http://laravel.com/docs/5.1/routing#route-parameters

Вам необходимо передать идентификатор, используя ваш маршрут.

В файле routes.php вы можете получить следующее:

 Route::get('subreddit/{id}', 'SubredditController@show'); 

И в SubredditController.php передайте id вашему методу, например:

 public function show($id) { $subreddit = Subreddit::findOrFail($id); $posts = $subreddit->posts()->get(); return view('subreddit/show')->with('subreddit', $subreddit) ->with('posts', $posts); } 

Почему вы вводите модель в параметр функции?

 show(Subreddit $subreddit) 

Я видел это где-то, но я не могу вспомнить о необходимости использовать его.

вы используете автоинкремент id столбца в базе данных ?, Если нет, вы должны указать его в модели, добавляющей свойство incrementing и устанавливая его в false

 public $incrementing = false; 

и укажите фактический ключ

 protected $primaryKey = 'code'; 

С конфигурацией, которую вы опубликовали, этот код работает для меня:

routes.php

 Route::resource('subreddit', 'SubredditController'); 

SubredditController.php

 public function show($id) { $subreddit = Subreddit::findOrFail($id); $subreddit->load('posts'); return view("subreddit/show")->with("subreddit", $subreddit); } 

URL

 http://localhost:8888/test/public/subreddit/1 

Я загружаю отношение в одном и том же объекте, поэтому отправляю только один параметр в представление

Я думаю, что вы хотите здесь привязать модель маршрута

Если вы используете laravel 5, у него есть отличный учебник для этого здесь.

здесь также имеется документация для привязки маршрутной модели.

Хорошая новость – это модель маршрута. Связывание также гибкое, даже привязка сложного подмножества данных от вашей модели к маршруту. который, я думаю, подойдет вам.

Категория Fetch со всеми сообщениями

 $categories = Subreddit::with('posts') -> where('id',$id) -> first(); if (categories){ $data['results'] = categories; }else{ $data['results'] = null; } return view('myview') -> with($data); 

Переменные $results будут доступны в вашем представлении. На ваш взгляд

 if (!is_null($results){ foreach($results as $result){ // do something. } } 

Помогите эту помощь.