Laravel: как разнести и показать несколько данных в select2 - PullRequest
0 голосов
/ 02 августа 2020

Я использую select2 и хочу отображать несколько данных из базы данных на странице редактирования

@foreach( $userLanguages as $userLanguageTitle)
 <option value="{{$user->languages}}">{{$userLanguageTitle}}</option>
@endforeach

Но показывать мне

<select name="languages[]" class="select2 form-control" multiple="multiple" required>                                                                                                                   
<option value="English,Persian,German" >English</option>                                                                                                                
<option value="English,Persian,German" >Persian</option>                                                                                                               
<option value="English,Persian,German" >French</option>                                                                                                                
<option value="English,Persian,German" >German</option>                                                                                                                
<option value="English,Persian,German" >Spanish</option>                                                                                                                
<option value="English,Persian,German" >Turkish</option>                                                                                                   
<option value="English,Persian,German" >Italian</option>
</select>

Я хочу показать выбранные данные в элементе Как в примере ниже

<select name="languages[]" class="select2 form-control" multiple="multiple" required>                                                                                                                   
<option value="English" selected >English</option>                                                                                                                
<option value="Persian" selected >Persian</option>                                                                                                               
<option value="French">French</option>                                                                                                                
<option value="German" selected >German</option>                                                                                                                
<option value="Spanish" >Spanish</option>                                                                                                                
<option value="Turkish" >Turkish</option>                                                                                                   
<option value="Italian" >Italian</option>
</select>

Модель

public static function getUserlanguages()
{
    return [
        self::ENGLISH => 'English',
        self::PERSIAN => 'Persian',
        self::FRENCH => 'French',
        self::GERMAN => 'German',
        self::SPANISH => 'Spanish',
        self::TURKISH => 'Turkish',
        self::ITALIAN => 'Italian',
    ];
}

контроллер

public function edit(Request $request, $id)
{
    $user = User::findOrFail($id);
    $userLanguages = User::getUserlanguages();
    return view('backend.users.edit', compact('user', 'userLanguages',));
}

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Попробуйте это, предполагая, что $user->languages является отношением в модели User и есть столбец name в languages таблице

@foreach($userLanguages as $userLanguageTitle)
 <option value="{{$userLanguageTitle}}" {{ (in_array($userLanguageTitle, $user->languages()->pluck('name')->toArray()) ? 'selected' : '') }}>{{$userLanguageTitle}}</option>
@endforeach
1 голос
/ 02 августа 2020

<option value="{{$user->languages}}">{{$userLanguageTitle}}</option>

Поскольку вы отредактировали код выше, я предполагаю, что $user->languages возвращает все языки User . Таким образом, он возвращает либо коллекцию, либо массив, но не один элемент Language. Таким образом, вы можете просто использовать value="{{$userLanguageTitle}}" для отображения названия языка или использовать его ключ следующим образом:

@foreach( $userLanguages as $key => $userLanguageTitle)
 <option value="{{$key}}">{{$userLanguageTitle}}</option>
@endforeach
...