I have a controller function like this
public function show(NovelRequest $request, Novel $novel)
{
// load the chapters
$novel->chapters;
// return the detail view of a novel
return view('novels.show', compact('novel'));
}
I receive a novel object because i m using route model binding. However, I'd like to load more than the chapters. Since it would cause many request if i now do something like
$novel->chapters;
$novel->bookmarks;
...
I wondered if theres a way to load "multiple" relations when i already have the novel object. Usually i would to something like
Novel::with('chapters', 'bookmarks')-> ...
However, I already have the novel object so i would like to not look it up a second time.
There is “Lazy Eager Loading“.
The syntax is $novel->load('chapters', 'bookmarks');
We can eager load the needed relations by customizing the resolution logic (for route model binding) by defining a resolveRouteBinding
method on the model.
// In the Novel model
public function resolveRouteBinding($value)
{
return $this->with(['chapters', 'bookmarks'])->where($this->getRouteKeyName(), $value)->firstOrFail();
}
https://laravel.com/docs/6.x/routing#explicit-binding
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With