Reputation: 19
I'm trying to show lessons from the course when i clicked on.
model lesson
public function course(){
return $this->belongsTo(Course::class);
}
model course
public function lesson() {
return $this->hasMany(Lesson::class);
}
show controller
public function show($id)
{
$cours = Course::findOrFailnd($id);
$lessons = course::findOrFail($id)->lesson;
return view('pages.lessons', compact('lessons', 'cours'));
}
page lesson
<div class="form-group">
<strong>Lessons : </strong>
@foreach ($lessons as $lesson )
{{$lesson->long_text}}
@endforeach
</div>
web routes
Route::resource('pages/lessons', 'LessonsController@show')->name('pages.lessons');
and i have this error:
Type error: Too few arguments to function Illuminate\Routing\PendingResourceRegistration::name(), 1 passed in C:\wamp64\www\learn2code\routes\web.php on line 21 and exactly 2 expected
Upvotes: 0
Views: 21381
Reputation: 795
Model Course
public function lessons() {
return $this->hasMany(Lesson::class);
}
Route
Route::get('pages/lessons/{course}', 'LessonsController@show')->name('pages.courses.lessons');
OR
Route::get('pages/courses/{course}/lessons', 'LessonsController@show')->name('pages.courses.lessons');
Controller show method
public function show(Course $course) {
return view('pages.lessons', compact('course'));
}
page lesson
<div class="form-group">
<strong>Lessons : </strong>
@foreach ($course->lessons as $lesson)
{{$lesson->long_text}}
@endforeach
</div>
Upvotes: 0
Reputation: 2435
For resource controllers its names
instead of name
:
Naming Resource Routes
By default, all resource controller actions have a route name; however, you can override these names by passing a names array with your options:
Route::resource('photos', 'PhotoController')->names([
'create' => 'photos.build'
]
Upvotes: 1