【问题标题】:Foreach and getting tags and categories from other tablesForeach 并从其他表中获取标签和类别
【发布时间】:2014-04-05 14:26:02
【问题描述】:

我很难想出好的标题,但我希望这能解释。

帖子表

+----+---------+-----------------+
| id |  title  |      text       |
+----+---------+-----------------+
|  1 | Title 1 | This is example |
|  2 | Title 2 | This is example |
|  3 | Title 3 | This is example |
+----+---------+-----------------+

标签表

+----+--------+
| id |  tag   |
+----+--------+
|  1 | jQuery |
|  2 | PHP    |
|  3 | Stack  |
+----+--------+

分类表

+----+------------+
| id |  category  |
+----+------------+
|  1 | Category 1 |
|  2 | Category 2 |
|  3 | Category 3 |
+----+------------+

发布标签关系表(与类别相同)

+---------+--------+
| post_id | tag_id |
+---------+--------+
|       1 |      1 |
|       1 |      2 |
|       2 |      3 |
+---------+--------+

这是我想在我的视图中看到的结果:

+---------+------------------+--------------------+------------+
|  Title  |       Text       |        Tags        | Categories |
+---------+------------------+--------------------+------------+
| Title 1 | This is example  | jQuery, PHP        | Category 2 |
| Title 2 | This is example  | Stack              | Category 1 |
| Title 3 | This is example  | jQuery, PHP, Stack | Category 1 |
+---------+------------------+--------------------+------------+

在我的控制器中,我有

public function index()
{
  $posts = Posts::orderBy('title', 'ASC')->get();

  return View::make('posts', array(
    'posts' => $posts)
  );
}

在我看来,我可以使用 foreach 循环列出所有帖子

@foreach ($posts as $post)
  Title: {{ $post->title }}
  Text: {{ $post->text }}
  Tags: ?
  Categories: ?
@endforeach

问题是在 foreach 循环中获取每个帖子的标签和类别的最佳方法是什么?

【问题讨论】:

  • 您是否在模型上建立了关系,或者您不了解主题并需要完整的解决方案?
  • 我阅读了 Laravel Eloquent ORM 教程并按照建议建立了关系,但我不确定是否符合我的需要,因为在这种情况下输出是:帖子标题和文本列表为很多次,因为有不同的标签。在这种情况下,我需要 foreach 循环用于帖子,并在自己的 foreach 循环中用于标签和类别?
  • 当然,您会获得包含相关标签集合的帖子集合,以及相关类别(如果也是多对多)/类别模型(如果是一对多)的集合。也阅读有关预加载的内容,因为现在您在每个循环代表中运行查询,即所谓的 n+1 问题
  • google "laravel pivot table", "Jeffrey Way's generator tool" 查找数据透视生成器及其详细信息,laravel 的官方文档中的关系,以及 n+1 问题...这些类型的在 laravel 中关系很容易管理

标签: database laravel foreach tags


【解决方案1】:

Shakil 的提示是正确的,我找到了我想要的东西。我很惊讶它是如此容易实现。这是我所做的:

帖子模型

class Posts extends Eloquent 
{
   protected $table = 'posts';

   public function tags()
   {
     return $this->belongsToMany('Tags', 'post_tags', 'post_id', 'tag_id');
   }

   public function category()
   {
     return $this->belongsToMany('Category', 'post_categories', 'post_id', 'category_id');
   }
}

查看

@foreach ($posts as $post)
  Title: {{ $post->title }}
  Text: {{ $post->text }}

  Tags: 
    @foreach ($post->tags as $tag)
      {{ $tag }}
    @endforeach

  Categories: 
    @foreach ($post->categories as $category)
     {{ $category }}
    @endforeach

@endforeach

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2022-12-17
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多