CategoryとCompanyが多対多の関係です。
ピボットテーブルはCategoryCompanyです。
一度保存したCompanyのCategory情報が編集の際にチェックボックスへ反映させる方法が見つからなかったため、自分なりにやってみた方法です。
要はCategory一覧と保存済みのCategoryをチェックする形です。
コントローラー
CompaniesController
//保存画面
public function edit($id)
{
//companyに関連したcategoriesを取得
$company = Company::with('categories')->findOrFail($id);
//カテゴリー一覧を取得
$categories= Category::all();
//dd($company->categories);
return view('companies.edit', compact('company','categories'));
}
//保存処理
public function update(Request $request, $id)
{
$requestData = $request->all();
$category_id = $requestData['category_id'];
$company = Company::findOrFail($id);
$company->update($requestData);
//syncする
$company->categories()->sync($category_id);
return redirect('companies')->with('flash_message', 'Company updated!');
}
ビュー
カテゴリー一覧のidと保存されているidが同じだったらチェックボックスにcheckを入れます。
form.blade.php
<?php
//すでに保存されているデータを取得してidを$categorySavedIdに入れる
$categorySavedId = array();
foreach($company->categories as $category) {
$id = $category->id;
array_push($categorySavedId,$id);
}
?>
<ul>
<?php foreach ($categories as $category): ?>
<?php
//カテゴリー一覧にcategorySavedIdがあるかチェック
$check = in_array($category->id,$categorySavedId);
?>
<?php if($check == true): ?>
<li><input type="checkbox" value="{{$category->id}}" id="category_{{ $category->id }}" name="category_id[]" checked="checked">
<label for="category_{{ $category->id }}">{{ $category->name }}
</label></li>
<?php else: ?>
<li><input type="checkbox" value="{{$category->id}}" id="category_{{ $category->id }}" name="category_id[]">
<label for="category_{{ $category->id }}">{{ $category->name }}
</label></li>
</label></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>