Laavel checkbox를 통한 여러 가지 접근 방식

개시하다


input checkbox 사용하기1. 複数チェックの取得 2. チェックしたデータを保持する方法총괄해 보았다.

테이블 설계 및 관계


이번에 사용usersテーブルcategoriesテーブル.
사용자가 여러 개의category를 가지고 있기 때문에category도 여러 개의user에 연결되어 있습니다
다대다의 관계.

표 디자인

◎usersテーブルmigration
public function up()
   {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
        });
   }
◎categoriesテーブルmigration
public function up()
   {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
   }
◎category_userテーブルmigration
public function up()
   {
        Schema::create('category_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('category_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->OnDelete('cascade');
            $table->foreign('category_id')->references('id')->on('categories')->OnDelete('cascade');
            $table->timestamps();
        });
   }
category_사용자 책상 위
migration
$table->foreign('user_id')->references('id')->on('users')->OnDelete('cascade');
$table->foreign('category_id')->references('id')->on('categories')->OnDelete('cascade');
그럼 일단 On Delete('cascade')부터 붙이죠.나중에 detach 때 같이 삭제하기 위해서.

관계 설계


User.php
public function categories()
{
    return $this->belongsToMany(Category::class);
}
여기까지 하면 이제 컨트롤러를 만들 거예요.

컨트롤러 디자인


Contorller
public function update(Request $request)
    {
        $user = Auth::user();

        $user->categories()->detach();
        $user->categories()->attach($request->category);
$user->categories()에서 관계를 맺고 attach($request->category)에서 요청한 분류를 연결합니다.
표에 추가OnDelete('cascade')는detach에서 삭제할 때 삭제하기 위해서user_id,category_id.
다음은 블레이드 디자인

블레이드 디자인


나는 이곳이 매우 괴롭다.데이터를 얻을 수 있지만 편집할 때 데이터를 저장하는 것은 매우 어렵다.
처음에old를 사용하여 데이터를 유지하려고 했지만 순조롭지 않아old 포함checked을 사용하지 않을 때if문을 만들었다.
blade
@foreach ($categories as $category)
   @if($user->categories->contains('id', $category->id))
     <input type="checkbox" name="category[]" value="{{ $category->id}}" checked>
   @else
     <input type="checkbox" name="category[]" value="{{ $category->id}}">
   @endif 
    <label for="">
     {{ $category->name }}
    </label>
@endforeach
지정한 id를 판단하기 위해 저장된 contains() 방법으로 지정한 id가 포함되어 있는지 확인했습니다.
다만, old로 데이터를 유지하고 싶어서 세 가지 연산자로 다음과 같은 내용을 써 보았다.
blade
@foreach($categories as $category)
  <input type="checkbox" name="category[]" id=""  value="{{ $category->id }}" 
       {{ $category->id == old('category', $user->categories->contains('id', $category->id) ?? '') ? 'checked' : ''}}  >
    <label for="category">
       {{ $category->name  }}
     </label>  
@endforeach
저장 후 편집 화면으로 옮겨도 체크 상자에 체크!
각양각색의 방법이 있으니 참고만 하세요!!

참고 자료


Laravel7.저장
Laravel7.관계

좋은 웹페이지 즐겨찾기