【问题标题】:Eager loading in many to many in laravel eloquent relationship (Retrieve all Posts with their assigned tags)在 laravel 雄辩的关系中渴望加载多对多(检索所有带有分配标签的帖子)
【发布时间】:2020-09-17 07:45:48
【问题描述】:

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

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

$posts = Post::with('tags')->get();

    foreach ($posts as $post) {
        foreach ($post->tags as $tag) {
            echo "<pre> $tag->name </pre>";
        }
    }
    die();

【问题讨论】:

标签: php laravel eloquent many-to-many


【解决方案1】:

您可以像在代码中一样获取所有带有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 视图与逻辑合并。

【讨论】:

  • 有没有不使用双foreach的解决方案?我实际上是在问我的学习目的。
  • 如果你想拿帖子里面的标签,没有别的办法。例如,您可以使用array_map,但最终仍然是一个循环。
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 2018-06-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
相关资源
最近更新 更多