Der er flere måder at gemme værdierne af flere afkrydsningsfelter i en database i Laravel. Her er nogle muligheder:
- Brug et felt af typen "boolesk". : hver afkrydsningsboks kan gemmes som "sand" eller "falsk" i et boolesk type felt i din database.
- Brug et "tekst"-felt : Du kan gemme værdierne for alle afkrydsningsfelter i et teksttypefelt, der adskiller hver værdi med et komma. For eksempel, hvis brugeren har markeret "frugt" og "grøntsager", kan du gemme disse oplysninger som "frugter, grøntsager" i et teksttypefelt.
- Brug en relationstabel : hvis du har flere afkrydsningsfelter, der er knyttet til den samme post, kan du bruge en relationstabel til at gemme disse data. For eksempel, hvis du har en "produkter"-tabel med en "kategorier"-kolonne, kan du oprette en "produktkategorier"-tabel, der linker de valgte kategorier til hvert produkt.
- Brug et felt af typen "tabel". : Hvis du bruger en database, der understøtter arrays (som PostgreSQL), kan du gemme værdierne af flere afkrydsningsfelter i et arraytypefelt. Dette giver dig mulighed for at gemme flere værdier i et enkelt felt uden at skulle bruge en relationstabel.
Gem flere afkrydsningsfeltværdier i en database ved hjælp af et array
I Laravel kan du gemme flere afkrydsningsfeltværdier i en database ved at bruge et array til at gemme værdierne i et enkelt felt. Her er et eksempel på, hvordan du kan gøre det:
1. Opret en migrering for at tilføje et felt til din databasetabel for at gemme afkrydsningsfeltværdier. For eksempel, hvis du vil gemme værdierne i et felt kaldet "indstillinger", kan du bruge følgende migrering:
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. I din formular skal du oprette afkrydsningsfelter for hver mulighed, du vil gemme. For eksempel :
<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. Hent værdierne af de valgte afkrydsningsfelter i din formularindsendelsesbehandlingslogik og gem dem i databasen. For eksempel :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Dette gemmer værdierne af de valgte afkrydsningsfelter i feltet "indstillinger" som et JSON-kodet array. Du kan derefter hente og vise de valgte værdier ved at afkode JSON-arrayet, når du henter posten fra databasen.
$model = Model::find($id);
$options = json_decode($model->options);
Prøvekoder til at gemme flere afkrydsningsfeltværdier i Laravel
Her er nogle eksempler på koder til lagring af værdierne af flere afkrydsningsfelter i en database i Laravel:
Brug et felt af typen "boolesk".
Oprettelse af den booleske kolonne "subscription_newsletter" i "brugere"-tabellen:
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
Registrering af brugerens tilmelding til nyhedsbrevet ved indsendelse af formularen:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Brug et "tekst"-felt
Oprettelse af "options_sélectionées"-kolonnen af teksttype i "survey"-tabellen:
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
Gem de valgmuligheder, som brugeren har valgt ved indsendelse af formularen:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Brug en relationstabel
Oprettelse af tabellen "categories_products" med kolonnerne "id_product" og "id_category":
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
Gem kategorier valgt af brugeren ved indsendelse af formularen:
$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();
}
Brug et felt af typen "tabel".
Oprettelse af kolonnen "options_selected" af tabeltypen i tabellen "poll" (hvis du bruger PostgreSQL):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
Gem de valgmuligheder, som brugeren har valgt ved indsendelse af formularen:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
Det er vigtigt at bemærke, at du under alle omstændigheder skal sikre, at dine afkrydsningsfeltværdier er korrekt valideret og renset, før de gemmes i din database. Du kan bruge Laravels valideringscontrollere og datafiltre til dette.