複数のチェックボックスの値を Laravel のデータベースに保存する方法はいくつかあります。 以下にいくつかのオプションを示します。
- 「ブール」タイプのフィールドを使用する : 各チェックボックスは、データベースのブール型フィールドに「true」または「false」として保存できます。
- 「テキスト」タイプのフィールドを使用する : チェックしたすべてのチェックボックスの値を、各値をコンマで区切ってテキスト型フィールドに保存できます。 たとえば、ユーザーが「果物」と「野菜」のボックスをチェックした場合、この情報を「果物、野菜」としてテキスト タイプ フィールドに保存できます。
- リレーションシップ テーブルを使用する : 同じレコードにリンクされた複数のチェックボックスがある場合、関係テーブルを使用してこのデータを保存できます。 たとえば、「categories」列を持つ「products」テーブルがある場合、選択したカテゴリを各製品にリンクする「product_categories」テーブルを作成できます。
- 「テーブル」タイプのフィールドを使用する : 配列をサポートするデータベース (PostgreSQL など) を使用している場合は、複数のチェックボックスの値を配列型フィールドに格納できます。 これにより、リレーションシップ テーブルを使用しなくても、XNUMX つのフィールドに複数の値を格納できます。
配列を使用して複数のチェックボックス値をデータベースに保存する
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();
これにより、選択したチェックボックスの値が「オプション」フィールドに 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();
いずれにしても、データベースに保存する前に、チェックボックスの値が適切に検証および消去されていることを確認する必要があることに注意することが重要です。 これには、Laravel の検証コントローラーとデータフィルターを使用できます。