in ,

Hur lagrar man flera kryssrutavärden i en databas i Laravel?

Jag måste lagra kryssrutevärden i databasen i Laravel. Hur göra ?

Hur lagrar man flera kryssrutavärden i en databas i Laravel?
Hur lagrar man flera kryssrutavärden i en databas i Laravel?

Det finns flera sätt att lagra värden för flera kryssrutor i en databas i Laravel. Här är några alternativ:

  1. Använd ett "booleskt" fält : varje kryssruta kan sparas som "true" eller "false" i ett booleskt fält i din databas.
  2. 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.
  3. 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.
  4. 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.

[Total: 1 Betyda: 5]

Skriven av Anton Gildebrand

Anton är en fullstack-utvecklare som brinner för att dela kodtips och lösningar med sina kollegor och utvecklargemenskapen. Med en gedigen bakgrund inom front-end- och back-end-teknologier är Anton skicklig i en mängd olika programmeringsspråk och ramverk. Han är en aktiv medlem i utvecklarforum online och bidrar regelbundet med idéer och lösningar för att hjälpa andra att lösa programmeringsutmaningar. På fritiden tycker Anton om att hålla sig uppdaterad om de senaste trenderna och teknologierna inom området och experimentera med nya verktyg och ramverk.

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *

Vad tror du?

387 Poäng
upvote downvote