繁体   English   中英

渴望在 laravel eloquent 关系中多对多加载(检索所有带有分配标签的帖子)

[英]Eager loading in many to many in laravel eloquent relationship (Retrieve all Posts with their assigned tags)

我的博客 laravel 项目有很多帖子,每个帖子都属于很多标签。 现在我想检索所有博客及其标签并回显每个标签。

这是我写的代码。 有没有更好的办法?

$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 视图与逻辑合并。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM