NOTE: Post和Tag模型之间的关系是多对多的,User和Post模型之间的关系是一对多 . 一切都运行得很好 I just have too many Queries 来自用户user.id ...当debbug它 . 我希望在我的控制器功能中使用急切加载用户功能 . 我如何使用 with('user')->get();
谢谢 .
这是我的web.php路线:
Route::get('/posts/tags/tag/{tag}', 'TagsController@show');
这是我的控制器功能:
<?php
namespace App \ Http \ Controllers;
使用Illuminate \ Http \ Request;
使用App \ Tag;使用App \ Post;
class TagsController扩展Controller {
public function __construct()
{
$this->middleware('auth')->except(['index']);
}
public function index(Tag $tag)
{
return view('posts.index', compact('tag'));
}
public function create()
{
return view('tags.create');
}
public function store(Request $request)
{
$this->validate(request(), [
'name' => 'required|max:255'
]);
Tag::create([
'name' => request('name')
]);
return redirect('/');
}
public function show(Tag $tag)
{
return view('tags.show', compact('tag'));
}
}
这是我的show.blade.php:
@foreach ($tag->posts as $post)
<div class="col-sm-6" >
<div class="card" style="margin-bottom:15px;">
<img class="card-img-top" src="https://neilpatel-qvjnwj7eutn3.netdna-ssl.com/wp-content/uploads/2015/07/seoimage.jpg" height="270px" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">
<a href="/posts/{{ $post->id }}">
{{ $post->title }}
</a>
</h5>
<p class="card-text">
{{ substr(strip_tags($post->body), 0, 50) }}{{ strlen(strip_tags($post->body)) > 50 ? "..." : "" }}
</p>
<p class="card-text"><small class="text-muted">{{ $post->user->name }} on
{{ $post->created_at->toFormattedDateString() }}</small></p>
<hr>
<a href="/posts/{{ $post->id }}" class="btn btn-warning">Go somewhere</a>
</div>
</div>
</div>
@endforeach
This is my queries (images below):
2 回答
您可以在控制器的
show()
方法中使用预先加载和延迟急切加载的组合 . 尝试这样的事情:https://laravel.com/docs/5.7/eloquent-relationships#lazy-eager-loading
在您的控制器中,您可以像下面这样执行,刀片代码保持不变 .
要么
希望这对你有用 .