Er zijn verschillende manieren om de waarden van meerdere selectievakjes op te slaan in een database in Laravel. Hier zijn enkele opties:
- Gebruik een veld van het type "boolean". : elk selectievakje kan worden opgeslagen als "true" of "false" in een booleaans veld in uw database.
- Gebruik een veld van het type "tekst". : u kunt de waarden van alle aangevinkte selectievakjes opslaan in een tekstveld, waarbij u elke waarde scheidt met een komma. Als de gebruiker bijvoorbeeld de vakjes "fruit" en "groenten" heeft aangevinkt, kunt u deze informatie opslaan als "fruit, groenten" in een tekstveld.
- Gebruik een relatietabel : als u meerdere checkboxen heeft die aan hetzelfde record zijn gekoppeld, kunt u een relatietabel gebruiken om deze gegevens op te slaan. Als u bijvoorbeeld een tabel "producten" heeft met een kolom "categorieën", kunt u een tabel "product_categorieën" maken die de geselecteerde categorieën aan elk product koppelt.
- Gebruik een veld van het type "tabel". : Als u een database gebruikt die arrays ondersteunt (zoals PostgreSQL), kunt u de waarden van meerdere selectievakjes opslaan in een veld van het type array. Hierdoor kunt u meerdere waarden in één veld opslaan zonder dat u een relatietabel hoeft te gebruiken.
Bewaar meerdere checkbox-waarden in een database met behulp van een array
In Laravel kunt u meerdere checkbox-waarden in een database opslaan door een array te gebruiken om de waarden in één veld op te slaan. Hier is een voorbeeld van hoe je het kunt doen:
1. Maak een migratie om een veld aan uw databasetabel toe te voegen om checkbox-waarden op te slaan. Als u bijvoorbeeld de waarden wilt opslaan in een veld met de naam "opties", kunt u de volgende migratie gebruiken:
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. Maak in uw formulier selectievakjes voor elke optie die u wilt opslaan. Bijvoorbeeld :
<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. Haal in uw verwerkingslogica voor het indienen van formulieren de waarden van de geselecteerde selectievakjes op en sla ze op in de database. Bijvoorbeeld :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Hiermee worden de waarden van de geselecteerde selectievakjes in het veld "opties" opgeslagen als een JSON-gecodeerde array. U kunt vervolgens de geselecteerde waarden ophalen en weergeven door de JSON-array te decoderen wanneer u het record uit de database haalt.
$model = Model::find($id);
$options = json_decode($model->options);
Voorbeeldcodes om meerdere selectievakjes in Laravel op te slaan
Hier zijn enkele voorbeeldcodes voor het opslaan van de waarden van meerdere selectievakjes in een database in Laravel:
Gebruik een veld van het type "boolean".
Creatie van de booleaanse kolom "subscription_newsletter" in de tabel "users":
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
Registratie van het abonnement van de gebruiker op de nieuwsbrief bij het verzenden van het formulier:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Gebruik een veld van het type "tekst".
Aanmaak van de tekstkolom "options_sélectionées" in de tabel "enquête":
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
Opslaan van de door de gebruiker geselecteerde opties bij het verzenden van het formulier:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Gebruik een relatietabel
Aanmaak van de tabel "categories_products" met de kolommen "id_product" en "id_category":
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
Categorieën opslaan die door de gebruiker zijn geselecteerd bij het verzenden van het formulier:
$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();
}
Gebruik een veld van het type "tabel".
Creatie van de kolom "options_selected" van het tabeltype in de tabel "poll" (als u PostgreSQL gebruikt):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
Opslaan van de door de gebruiker geselecteerde opties bij het verzenden van het formulier:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
Het is belangrijk op te merken dat u er in ieder geval voor moet zorgen dat de waarden van uw selectievakjes correct zijn gevalideerd en opgeschoond voordat ze in uw database worden opgeslagen. Hiervoor kun je de validatiecontrollers en datafilters van Laravel gebruiken.