在 laravel eloquent 关系中渴望加载多对多(检索所有带有分配标签的帖子)
Eager loading in many to many in laravel eloquent relationship (Retrieve all Posts with their assigned tags)
我的博客 laravel 项目有很多 Post,每个 Post 属于很多标签。
现在我想检索所有博客及其标签并回显每个标签。
这是我写的代码。有没有更好的方法?
$posts = Post::with('tags')->get();
foreach ($posts as $post) {
foreach ($post->tags as $tag) {
echo "<pre> $tag->name </pre>";
}
}
die();
您可以像在代码中一样获取所有带有 Eager loading
的标签。
看看https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
$posts = App\Post::with('tags:name')->get();
foreach ($posts as $post) {
foreach ($post->tags as $tag) {
echo "<pre> $tag->name </pre>";
}
}
这是正确的解决方案。
您甚至可以使用 DB
查询来更快地完成它,但您的方式可能就足够了。
$posts = App\Post::all()->pluck('id');
return DB::select('SELECT name FROM tags WHERE id in (' . implode(',', $posts) . ')');
最后提示:不要将 HTML 视图与逻辑合并。
我的博客 laravel 项目有很多 Post,每个 Post 属于很多标签。 现在我想检索所有博客及其标签并回显每个标签。
这是我写的代码。有没有更好的方法?
$posts = Post::with('tags')->get();
foreach ($posts as $post) {
foreach ($post->tags as $tag) {
echo "<pre> $tag->name </pre>";
}
}
die();
您可以像在代码中一样获取所有带有 Eager loading
的标签。
看看https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
$posts = App\Post::with('tags:name')->get();
foreach ($posts as $post) {
foreach ($post->tags as $tag) {
echo "<pre> $tag->name </pre>";
}
}
这是正确的解决方案。
您甚至可以使用 DB
查询来更快地完成它,但您的方式可能就足够了。
$posts = App\Post::all()->pluck('id');
return DB::select('SELECT name FROM tags WHERE id in (' . implode(',', $posts) . ')');
最后提示:不要将 HTML 视图与逻辑合并。