希望大家都做得很好。我在职位和类别表之间有很多关系。通过使用数据透视表,我可以获取帖子所属的所有类别,但无法获取数据库中存在的所有类别。
这是我的编辑帖子方法:
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用作多重选择框
答案 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'));
}
我假设您在发布模型中正确建立了从categories
到posts
的关系。但这实际上只是在问:“此表单上的帖子是否具有此类别(在此循环中),然后将其标记为选中”。
我真的很喜欢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>