Как выбрать несколько вариантов по умолчанию, используя select2 и Laravel

У меня есть таблицы в базе данных следующим образом.

resumes

id    name    phone



categories

id   catName

Тогда у меня есть сводная таблица для хранения многих ко многим

category_resume

category_id    resume_id

Теперь у меня есть редактирование представления Resume, где я хочу отобразить все сохраненные категории для конкретного резюме. Я использую плагин select2 для выбора полей.

я пробовал это до сих пор

<select class="select2" multiple="true">
@foreach($categories as $category)
<option {{$category->id == $resume->categories->category_id ? 'selected':''}}>
{{$category->catName}}
</option>
@endforeach
</select>

к сожалению, это дает мне ошибку, потому что $resume->categories это коллекция, и я не могу получить к ней доступ, как это $resume->categories->category_id, мне нужно использовать foreach здесь.
Но мой вопрос заключается в том, как сделать выбор в окне выбора с соответствующими категориями при загрузке?

Благодарю.

0

Решение

Причина, по которой вы не можете сравнить $category->id с $resume->categories->category_id как вы говорите, последний даст вам коллекцию, и вам действительно нужно просто проверить, что $category->id существует в массиве выбранных идентификаторов.

Вы должны создать массив в вашем контроллере, прежде чем передавать его в представление;

Что-то вроде:

public function show($id)
{
$resume = Resume::findOrFail($id);
$selectedCategories = $resume->categories->pluck('id')->toArray();

return view('resume.view', compact('resume', 'selectedCategories');

}

Тогда, по вашему мнению, сделайте;

<select class="select2" multiple="true">
@foreach($categories as $category)
<option {{in_array($category->id, $selectedCategories) ? 'selected':''}}>
{{$category->catName}}
</option>
@endforeach
</select>

Также имеет смысл проверить, что $categories не пусто, прежде чем его проповедовать.

@if(! empty($categories))
@foreach($categories as $category)
...
@endforeach
@endif
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]