LoginSignup
1
0

More than 5 years have passed since last update.

Laravelで保存済みのチェックボックスをViewに反映させる

Last updated at Posted at 2019-02-24

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>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0