in ,

Kiel stoki plurajn Checkbox-valorojn en datumbazo en Laravel?

Mi devas stoki markobutonajn valorojn en datumbazo en Laravel. Kiel fari ?

Kiel stoki plurajn Checkbox-valorojn en datumbazo en Laravel?
Kiel stoki plurajn Checkbox-valorojn en datumbazo en Laravel?

Estas pluraj manieroj stoki la valorojn de pluraj markobutonoj en datumbazo en Laravel. Jen kelkaj opcioj:

  1. Uzu "bulean" tipkampon : ĉiu markobutono povas esti konservita kiel "vera" aŭ "malvera" en buleaspeca kampo en via datumbazo.
  2. Uzu "tekston" tipkampon : vi povas konservi la valorojn de ĉiuj markobutonoj en tekstspeca kampo, apartigante ĉiun valoron per komo. Ekzemple, se la uzanto markis la skatolojn "fruktoj" kaj "legomoj", vi povas konservi ĉi tiun informon kiel "fruktoj,legomoj" en tekstspeca kampo.
  3. Uzu interrilatan tabelon : se vi havas plurajn markobutonojn, kiuj estas ligitaj al la sama rekordo, vi povas uzi rilattabelon por konservi ĉi tiujn datumojn. Ekzemple, se vi havas tabelon "produktoj" kun kolumno "kategorioj", vi povas krei tabelon "produkto_kategorioj", kiu ligas la elektitajn kategoriojn al ĉiu produkto.
  4. Uzu "tabelon" tipkampon : Se vi uzas datumbazon, kiu subtenas tabelojn (kiel PostgreSQL), vi povas konservi la valorojn de pluraj markobutonoj en tabel-speca kampo. Ĉi tio permesos al vi stoki plurajn valorojn en ununura kampo sen devi uzi interrilatan tabelon.

Stoku plurajn markobutonajn valorojn en datumbazo per tabelo

En Laravel, vi povas stoki plurajn markobutonajn valorojn en datumbazo uzante tabelon por stoki la valorojn en ununura kampo. Jen ekzemplo de kiel vi povas fari ĝin:

1. Kreu migradon por aldoni kampon al via datumbaza tabelo por konservi markobutonajn valorojn. Ekzemple, se vi volas konservi la valorojn en kampo nomata "opcioj", vi povas uzi la jenan migradon:

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. En via formularo, kreu markobutonojn por ĉiu opcio, kiun vi volas konservi. Ekzemple :

<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. En via formo-submetado prilaborado, retrovu la valorojn de la elektitaj markobutonoj kaj konservu ilin en la datumbazo. Ekzemple :

$options = $request->input('options');

$model = new Model();
$model->options = json_encode($options);
$model->save();

Ĉi tio stokas la valorojn de la elektitaj markobutonoj en la kampo "opcioj" kiel JSON-kodita tabelo. Vi tiam povas reakiri kaj montri la elektitajn valorojn malkodante la JSON-tabelon kiam vi prenas la rekordon el la datumbazo.

$model = Model::find($id);
$options = json_decode($model->options);

Ekzemplaj kodoj por stoki plurajn markobutonajn valorojn en Laravel

Jen kelkaj ekzemplaj kodoj por stoki la valorojn de multoblaj markobutonoj en datumbazo en Laravel:

Uzu "bulean" tipkampon

Kreo de la bulea kolumno “subscription_newsletter” en la tabelo “uzantoj”:

Schema::table('utilisateurs', function (Blueprint $table) {
    $table->boolean('abonnement_newsletter')->default(0);
});

Registrado de la abono de la uzanto al la informilo dum sendado de la formularo:

$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();

Uzu "tekston" tipkampon

Kreo de la kolumno "options_sélectionées" de tekstotipo en la tabelo "enketo":

Schema::table('sondage', function (Blueprint $table) {
    $table->text('options_sélectionnées');
});

Konservante la elektojn elektitajn de la uzanto dum sendado de la formularo:

$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();

Uzu interrilatan tabelon

Kreo de la tabelo "kategorioj_produktoj" kun la kolumnoj "id_product" kaj "id_category":

Schema::create('catégories_produits', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('id_produit');
    $table->integer('id_catégorie');
    $table->timestamps();
});

Konservante kategoriojn elektitajn de la uzanto dum sendado de la formularo:

$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();
}

Uzu "tabelon" tipkampon

Kreo de la kolumno "options_selected" de tabeltipo en la tabelo "poll" (se vi uzas PostgreSQL):

Schema::table('sondage', function (Blueprint $table) {
    $table->jsonb('options_sélectionnées');
});

Konservante la elektojn elektitajn de la uzanto dum sendado de la formularo:

$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();

Gravas noti, ke, ĉiukaze, vi devos certigi, ke viaj markobutono-valoroj estas taŭge validigitaj kaj sanigitaj antaŭ ol esti konservitaj en via datumbazo. Vi povas uzi la validigajn regilojn kaj datumfiltrilojn de Laravel por ĉi tio.

[Entute: 1 Mezumo: 5]

skribita de Anton Gildebrand

Anton estas plena programisto pasia pri kunhavigo de kodaj konsiletoj kaj solvoj kun siaj kolegoj kaj la programista komunumo. Kun solida fono pri antaŭaj kaj malantaŭaj teknologioj, Anton scipovas diversajn programlingvojn kaj kadrojn. Li estas aktiva membro de interretaj programistaj forumoj kaj regule kontribuas ideojn kaj solvojn por helpi aliajn solvi programajn defiojn. En sia libertempo, Anton ĝuas resti ĝisdatigita pri la plej novaj tendencoj kaj teknologioj en la kampo kaj eksperimenti kun novaj iloj kaj kadroj.

Laisser un Commentaire

Via retpoŝta adreso ne estos publikigita. Bezonata kampoj estas markitaj *

Kion vi pensas?