Laravel의 데이터베이스에 여러 확인란의 값을 저장하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지 옵션입니다.
- "부울" 유형 필드 사용 : 각 확인란은 데이터베이스의 부울 유형 필드에 "참" 또는 "거짓"으로 저장할 수 있습니다.
- "텍스트" 유형 필드 사용 : 체크박스에 체크된 모든 값을 쉼표로 구분하여 텍스트 타입 필드에 저장할 수 있습니다. 예를 들어 사용자가 "과일" 및 "야채" 상자를 선택한 경우 이 정보를 텍스트 유형 필드에 "과일,야채"로 저장할 수 있습니다.
- 관계 테이블 사용 : 동일한 레코드에 연결된 여러 확인란이 있는 경우 관계 테이블을 사용하여 이 데이터를 저장할 수 있습니다. 예를 들어 "카테고리" 열이 있는 "제품" 테이블이 있는 경우 선택한 범주를 각 제품에 연결하는 "제품_카테고리" 테이블을 만들 수 있습니다.
- "테이블" 유형 필드 사용 : 배열을 지원하는 데이터베이스(예: PostgreSQL)를 사용하는 경우 배열 유형 필드에 여러 확인란의 값을 저장할 수 있습니다. 이렇게 하면 관계 테이블을 사용하지 않고도 단일 필드에 여러 값을 저장할 수 있습니다.
목차
배열을 사용하여 데이터베이스에 여러 확인란 값 저장
Laravel에서는 배열을 사용하여 단일 필드에 값을 저장함으로써 데이터베이스에 여러 체크박스 값을 저장할 수 있습니다. 다음은 이를 수행하는 방법의 예입니다.
1. 체크박스 값을 저장하기 위해 데이터베이스 테이블에 필드를 추가하는 마이그레이션을 생성합니다. 예를 들어 "options"라는 필드에 값을 저장하려는 경우 다음 마이그레이션을 사용할 수 있습니다.
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddOptionsToTableName extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('table_name', function (Blueprint $table) {
$table->text('options')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('table_name', function (Blueprint $table) {
$table->dropColumn('options');
});
}
}
2. 양식에서 저장하려는 각 옵션에 대한 확인란을 만듭니다. 예를 들어 :
<input type="checkbox" name="options[]" value="option1"> Option 1
<input type="checkbox" name="options[]" value="option2"> Option 2
<input type="checkbox" name="options[]" value="option3"> Option 3
3. 양식 제출 처리 논리에서 선택한 확인란의 값을 검색하고 데이터베이스에 저장합니다. 예를 들어 :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
"options" 필드에서 선택된 체크박스의 값을 JSON 인코딩 배열로 저장합니다. 그런 다음 데이터베이스에서 레코드를 검색할 때 JSON 배열을 디코딩하여 선택한 값을 검색하고 표시할 수 있습니다.
$model = Model::find($id);
$options = json_decode($model->options);
Laravel에 여러 확인란 값을 저장하는 샘플 코드
다음은 Laravel의 데이터베이스에 여러 확인란의 값을 저장하기 위한 몇 가지 샘플 코드입니다.
"부울" 유형 필드 사용
"users" 테이블에 "subscription_newsletter" 부울 열 생성:
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
양식을 제출할 때 사용자의 뉴스레터 구독 등록:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
"텍스트" 유형 필드 사용
"survey" 테이블에서 텍스트 유형의 "options_sélectionées" 열 생성:
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
양식을 제출할 때 사용자가 선택한 옵션 저장:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
관계 테이블 사용
"id_product" 및 "id_category" 열이 있는 "categories_products" 테이블 생성:
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
양식을 제출할 때 사용자가 선택한 범주 저장:
$produit = new Produit;
$produit->save();
foreach ($request->input('catégories') as $catégorie) {
$catégorie_produit = new CatégorieProduit;
$catégorie_produit->id_produit = $produit->id;
$catégorie_produit->id_catégorie = $catégorie;
$catégorie_produit->save();
}
"테이블" 유형 필드 사용
"poll" 테이블에서 테이블 유형의 "options_selected" 열 생성(PostgreSQL을 사용하는 경우):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
양식을 제출할 때 사용자가 선택한 옵션 저장:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
어떤 경우든 데이터베이스에 저장하기 전에 확인란 값이 적절하게 검증되고 정리되었는지 확인해야 합니다. 이를 위해 라라벨의 검증 컨트롤러와 데이터 필터를 사용할 수 있습니다.