在laravel中获取具有特定标记的所有数据

时间:2017-10-23 06:23:19

标签: php laravel laravel-5 tags laravel-5.3

我对posttagspost_tags使用了雄辩的关系。我尝试做的是在前端视图中使用特定posts制作tags部分。就像我有一个部分1一样,它应该包含标记"new"的所有帖子,部分2应该包含标记"old"等的所有帖子。我希望所有这些都是发生在同一个视图中。

发布模型

public function tags()
{
    return $this->belongsToMany('App\Tag', 'post_tag');
}

标记模型

 public function posts()
 {
     return $this->belongsToMany('App\Post', 'post_tag');
 }

控制器

public function index()
{
    $posts = Post::all();
    return view('frontend.index')->withPosts($posts);    
}

请帮帮我:)

3 个答案:

答案 0 :(得分:1)

要获取名称为new的所有帖子,请执行以下操作:

Post::whereHas('tags', function ($q) {
    $q->where('name', 'new');
})->get();

答案 1 :(得分:0)

您可以通过加载帖子获取所有标记:

public function index()
{
    $tags = Tag::with('posts')->get();
    return view('frontend.index')->withTags($tags);    
}

在视图中,您可以执行以下操作:

@foreach ($tags as $tag)
    <h2>Tag : {{ $tag->name }}</h2>
    @foreach ($tag->posts as $post)
        <p>Post : {{ $post->title }}</p>
    @endforeach
@endforeach

用于设置您拥有标签的帖子:

public function index()
{
    $tagName = 'new';
    $posts = Post::whereHas('tags', function ($q) use($tagName) {
        $q->where('name', $tagName);
    })->get();
    return view('frontend.index')->withTagName($tagName)->withPosts($posts);
}

在视图中你可以这样做:

<h2>Tag : {{ $tagName }}</h2>
@foreach ($posts as $post)
    <p>Post : {{ $post->title }}</p>
@endforeach

如果你想从视图中进行查询,你可以这样做(但它不是一种上帝的做法,因为视图只是用于查看内容而不是从数据库中获取):

<?php foreach ((\App\Post::whereHas('tags', function ($q) use($tagName) {
                    $q->where('name', $tagName);
                })->get()) as $post) { ?>

            <p>Post : {{ $post->title }}</p>

<?php } ?>

答案 2 :(得分:0)

解决方案并非完美答案
您可以通过两种方式处理这种情况

1- send two objects from controller to view seprate one for only new tag and second without new tag

2-您可以使用条件

在前端处理这种情况
@if($user->tag == "new")
{$user->show}
@endif