如何显示所选帖子所属的类别以及所有类别

时间:2019-08-23 15:31:16

标签: php laravel blogs

希望大家都做得很好。我在职位和类别表之间有很多关系。通过使用数据透视表,我可以获取帖子所属的所有类别,但无法获取数据库中存在的所有类别。

这是我的编辑帖子方法:

public function edit(Post $post)
{
    $post=Post::find($post->id);
    $categories=Category::all();
    return view('admin.pages.post.edit',compact('post','categories'));
}

这是即时通讯在我看来所使用的:

<div class="form-group">
   <label>Categories</label>
    <select class="form-control" id="select2" name="categories_id[]" multiple="multiple">
     @foreach($post->categories as $category)
        <option value="{{ $category->id }}" selected>{{ $category->name}}</option>
     @endforeach

^^这显示了帖子所属的当前类别。

现在我有一个属于WEB类别的帖子。并且它在编辑页面中将WEB显示为类别,但我也想显示帖子最初不属于的所有类别(AI,ML等),以便用户可以选择更新帖子所属于的类别属于。

我也将select2用作多重选择框

这就是我所拥有的 enter image description here

这就是我之后 enter image description here

2 个答案:

答案 0 :(得分:0)

在HTML表单上,您可以像这样检查id是否是$post的一部分(我将做最简单的理解,您可以重构许多方式):

 <option value="{{ $category->id }}" {{isset($post->categories->where('id', $category->id)->first())?'selected':''}}>{{ $category->name}}</option>

要简化操作并减少对数据库的调用,请在刀片视图上循环之前将类别关系加载到您的帖子上。您不需要行($post=Post::find($post->id);),因为您的路由模型绑定已经注入了它。

在您的 Controller edit方法中:

 public function edit(Post $post)
 {
     $post->load('categories');
     $categories=Category::all();
     return view('admin.pages.post.edit',compact('post','categories'));
 }

我假设您在发布模型中正确建立了从categoriesposts的关系。但这实际上只是在问:“此表单上的帖子是否具有此类别(在此循环中),然后将其标记为选中”。

我真的很喜欢LaravelCollective做到这一点的方法,并建议您看看at the library。它将模型绑定到表单,并自动为您选择选定的项目。您可以使用Collective在这样的简单行中完成此操作:

 {!! Form::select('categories[]', $categories, null, ['class'=>'form-control', 'multiple', 'id'=>'categories']) !!}

答案 1 :(得分:-1)

修复了数小时的搜索问题

在编辑方法中,我做了:

public function edit(Post $post)
{
    $post=Post::with('tags','categories')->find($post->id);
    $tags=Tag::all();
    $categories=Category::all();
    return view('admin.pages.post.edit',compact('post','categories','tags'));
}

我认为:

<div class="form-group">
       <label>Categories</label>
       <select class="form-control" id="categories" name="categories[]" multiple="multiple">
           @foreach($categories as $category)
           <option value="{{ $category->id }}"
                @foreach($post->categories as $postCat)
                      {{ $postCat->id==$category->id?'Selected':'' }}
                @endforeach
           >{{ $category->name}}</option>
           @endforeach
        </select>