Det finns flera sätt att lagra värden för flera kryssrutor i en databas i Laravel. Här är några alternativ:
- Använd ett "booleskt" fält : varje kryssruta kan sparas som "true" eller "false" i ett booleskt fält i din databas.
- Använd ett fält av typen "text". : du kan lagra värdena för alla markerade kryssrutor i ett texttypfält, och separera varje värde med ett kommatecken. Om användaren till exempel har markerat rutorna "frukt" och "grönsaker", kan du spara denna information som "frukt, grönsaker" i ett texttypfält.
- Använd en relationstabell : om du har flera kryssrutor som är länkade till samma post kan du använda en relationstabell för att lagra dessa data. Om du till exempel har en "produkter"-tabell med kolumnen "kategorier", kan du skapa en "produktkategorier"-tabell som länkar de valda kategorierna till varje produkt.
- Använd ett fält av typen "tabell". : Om du använder en databas som stöder arrayer (som PostgreSQL), kan du lagra värdena för flera kryssrutor i ett fält av arraytyp. Detta gör att du kan lagra flera värden i ett enda fält utan att behöva använda en relationstabell.
Lagra flera kryssrutor i en databas med hjälp av en array
I Laravel kan du lagra flera kryssrutor i en databas genom att använda en array för att lagra värdena i ett enda fält. Här är ett exempel på hur du kan göra det:
1. Skapa en migrering för att lägga till ett fält i din databastabell för att lagra kryssrutevärden. Om du till exempel vill lagra värdena i ett fält som heter "alternativ", kan du använda följande 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. Skapa kryssrutor i ditt formulär för varje alternativ du vill spara. Till exempel :
<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. I din bearbetningslogik för formulärinlämning hämtar du värdena för de valda kryssrutorna och lagrar dem i databasen. Till exempel :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Detta lagrar värdena för de valda kryssrutorna i fältet "alternativ" som en JSON-kodad array. Du kan sedan hämta och visa de valda värdena genom att avkoda JSON-matrisen när du hämtar posten från databasen.
$model = Model::find($id);
$options = json_decode($model->options);
Exempelkoder för att lagra flera kryssrutor i Laravel
Här är några exempelkoder för att lagra värdena för flera kryssrutor i en databas i Laravel:
Använd ett "booleskt" fält
Skapande av den booleska kolumnen "subscription_newsletter" i tabellen "användare":
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
Registrering av användarens prenumeration på nyhetsbrevet vid inlämning av formuläret:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Använd ett fält av typen "text".
Skapande av kolumnen "options_sélectionées" av texttyp i tabellen "enkät":
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
Spara de alternativ som valts av användaren när formuläret skickas:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Använd en relationstabell
Skapande av tabellen "categories_products" med kolumnerna "id_product" och "id_category":
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
Spara kategorier som valts av användaren när formuläret skickas:
$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();
}
Använd ett fält av typen "tabell".
Skapande av kolumnen "options_selected" av tabelltyp i tabellen "poll" (om du använder PostgreSQL):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
Spara de alternativ som valts av användaren när formuläret skickas:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
Det är viktigt att notera att du i alla fall måste se till att dina kryssrutavärden är korrekt validerade och rensade innan de sparas i din databas. Du kan använda Laravels valideringskontrollanter och datafilter för detta.