Laravel 5.1: 更新文章时显示所有选中的标签
Laravel 5.1: Show all selected tags when update article
我尝试更新某些文章时无法显示所有选定的标签。
我是 laravel 和 php 的新手,所以,这是我的代码:
<select name="tags[]" class="form-control" multiple="multiple">
@foreach($tags as $key => $value)
@foreach($news->tags as $tag)
<option value="{{ $key }}" @if($tag->name == $value) selected @endif>{{ $value }}</option>
@endforeach
@endforeach
</select>
但结果并不是我实际期望的那样:
<select name="tags[]" class="form-control" multiple="multiple">
<option value="1" selected="">1</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="3" selected="">3</option>
</select>
一定是这样的:
<select name="tags[]" class="form-control" multiple="multiple">
<option value="1" selected>1</option>
<option value="2">2</option>
<option value="3" selected>3</option>
</select>
我该怎么做?
谢谢!
做这样的事情。最好将代码放在控制器的 php 标记内,然后将变量传递给视图。
<?php
$tagsObjectArray = $news->tags->toArray();
$tagsArray = array_column($tagsObjectArray, 'name');
?>
<select name="tags[]" class="form-control" multiple="multiple">
@foreach($tags as $key => $value)
<option value="{{ $key }}" @if(in_array($value, $tagsArray)) selected @endif>{{ $value }}</option>
@endforeach
</select>
只需将选定的标签传递给视图并使用 contains 方法
$tags = Tag::all();
$selectedTags = $article->tags;
return view('YOUR VIEW',[
'tags' => $tags,
'selectedTags' => $selectedTags
]);
可见:
@foreach($tags as $tag)
<option value="{{$tag->id}}" @if ($selectedTags->contains($tag->id)) selected @endif>{{$tag->name}}</option>
@endforeach
我尝试更新某些文章时无法显示所有选定的标签。
我是 laravel 和 php 的新手,所以,这是我的代码:
<select name="tags[]" class="form-control" multiple="multiple">
@foreach($tags as $key => $value)
@foreach($news->tags as $tag)
<option value="{{ $key }}" @if($tag->name == $value) selected @endif>{{ $value }}</option>
@endforeach
@endforeach
</select>
但结果并不是我实际期望的那样:
<select name="tags[]" class="form-control" multiple="multiple">
<option value="1" selected="">1</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="3" selected="">3</option>
</select>
一定是这样的:
<select name="tags[]" class="form-control" multiple="multiple">
<option value="1" selected>1</option>
<option value="2">2</option>
<option value="3" selected>3</option>
</select>
我该怎么做? 谢谢!
做这样的事情。最好将代码放在控制器的 php 标记内,然后将变量传递给视图。
<?php
$tagsObjectArray = $news->tags->toArray();
$tagsArray = array_column($tagsObjectArray, 'name');
?>
<select name="tags[]" class="form-control" multiple="multiple">
@foreach($tags as $key => $value)
<option value="{{ $key }}" @if(in_array($value, $tagsArray)) selected @endif>{{ $value }}</option>
@endforeach
</select>
只需将选定的标签传递给视图并使用 contains 方法
$tags = Tag::all();
$selectedTags = $article->tags;
return view('YOUR VIEW',[
'tags' => $tags,
'selectedTags' => $selectedTags
]);
可见:
@foreach($tags as $tag)
<option value="{{$tag->id}}" @if ($selectedTags->contains($tag->id)) selected @endif>{{$tag->name}}</option>
@endforeach