У меня есть таблицы в базе данных следующим образом.
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 здесь.
Но мой вопрос заключается в том, как сделать выбор в окне выбора с соответствующими категориями при загрузке?
Благодарю.
Причина, по которой вы не можете сравнить $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
Других решений пока нет …