Laravel 5.1: 更新文章时显示所有选中的标签.

问题描述 投票:0回答:2

我有一个问题,当我试图更新一些文章时,要显示所有选择的标签。

我是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 laravel foreach tags laravel-5.1
2个回答
0
投票

做一些像这样的事情。最好是把代码放在控制器的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>

1
投票

简单的说,你可以把选定的标签传递给视图,然后使用包含方法。

$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
© www.soinside.com 2019 - 2024. All rights reserved.