in ,

Ларавелдеги маалымат базасында бир нече Checkbox маанилерин кантип сактоо керек?

Мен Laravel маалымат базасында белги кутучасынын маанилерин сактоо керек. Кантип кылыш керек?

Ларавелдеги маалымат базасында бир нече Checkbox маанилерин кантип сактоо керек?
Ларавелдеги маалымат базасында бир нече Checkbox маанилерин кантип сактоо керек?

Ларавелдеги маалымат базасында бир нече белгилердин маанилерин сактоонун бир нече жолу бар. Бул жерде кээ бир параметрлер бар:

  1. "Логикалык" типтеги талааны колдонуңуз : ар бир белги кутучасы маалымат базаңыздагы логикалык типтеги талаада "чын" же "жалган" катары сакталышы мүмкүн.
  2. "Текст" түрү талаасын колдонуңуз : ар бир маанини үтүр менен бөлүп, текст түрү талаасында бардык белгиленген белгилердин маанилерин сактай аласыз. Мисалы, колдонуучу "жемиштер" жана "жашылчалар" кутучаларын белгилесе, сиз бул маалыматты "жемиштер, жашылчалар" катары текст түрү талаасында сактай аласыз.
  3. Мамилелер таблицасын колдонуңуз : эгерде сизде бир эле жазууга байланышкан бир нече кутучалар болсо, бул маалыматтарды сактоо үчүн байланыш таблицасын колдоно аласыз. Мисалы, сизде "категориялар" тилкеси бар "өнүмдөр" таблицасы болсо, тандалган категорияларды ар бир продуктка байланыштырган "продукт_категориялары" таблицасын түзө аласыз.
  4. "Таблица" түрү талаасын колдонуңуз : Эгерде сиз массивдерди колдогон маалымат базасын колдонуп жатсаңыз (мисалы, PostgreSQL), массив түрү талаасында бир нече белги кутучаларынын маанилерин сактай аласыз. Бул байланыш таблицасын колдонбостон, бир талаада бир нече маанилерди сактоого мүмкүндүк берет.

Массивди колдонуп маалымат базасында бир нече кутучанын маанилерин сактаңыз

Ларавелде сиз бир талаада баалуулуктарды сактоо үчүн массивди колдонуу менен маалымат базасында бир нече кутучанын маанилерин сактай аласыз. Муну кантип кыла аларыңыздын бир мисалы:

1. Белгилөө кутучасынын маанилерин сактоо үчүн маалымат базасынын таблицасына талаа кошуу үчүн миграцияны түзүңүз. Мисалы, эгер сиз баалуулуктарды "параметрлер" деп аталган талаада сактагыңыз келсе, төмөнкү көчүрүүнү колдоно аласыз:

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. Формаңызда сактагыңыз келген ар бир параметр үчүн белги кутучаларын түзүңүз. Мисалы :

<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. Форманы тапшырууну иштетүү логикасында тандалган кутучалардын маанилерин чыгарып, маалымат базасында сактаңыз. Мисалы :

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

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

Бул "параметрлер" талаасында тандалган кутучалардын маанилерин JSON коддолгон массив катары сактайт. Сиз андан кийин маалымат базасынан жазууну алып жатканда JSON массивинин коддон чыгуусу менен тандалган маанилерди чыгарып, көрсөтө аласыз.

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

Ларавелде бир нече кутучанын маанилерин сактоо үчүн үлгү коддору

Бул жерде Laravel маалымат базасында бир нече белгилердин маанилерин сактоо үчүн кээ бир үлгү коддору болуп саналат:

"Логикалык" типтеги талааны колдонуңуз

"Колдонуучулар" таблицасындагы "жазылуу_жаңылыктары" логикалык тилкесин түзүү:

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

Форманы тапшырууда колдонуучунун маалымат бюллетенине жазылуусун каттоо:

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

"Текст" түрү талаасын колдонуңуз

"Сурамжылоонун" таблицасындагы текст түрүндөгү "options_sélectionées" тилкесин түзүү:

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

Форма тапшырууда колдонуучу тандаган опцияларды сактоо:

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

Мамилелер таблицасын колдонуңуз

"id_product" жана "id_category" тилкелери менен "категориялар_продукттары" таблицасын түзүү:

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

Форма тапшырууда колдонуучу тандаган категорияларды сактоо:

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

"Таблица" түрү талаасын колдонуңуз

"Сурамжылоонун" таблицасындагы таблица тибиндеги "options_selected" тилкесин түзүү (эгерде сиз PostgreSQL колдонсоңуз):

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

Форма тапшырууда колдонуучу тандаган опцияларды сактоо:

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

Кандай болгон күндө да, маалымат базасына сакталганга чейин текшерүү кутучасынын баалуулуктары туура текшерилип, тазаланганына кепилдик беришиңиз керек экенин белгилей кетүү маанилүү. Бул үчүн сиз Laravelдин текшерүү контроллерлорун жана маалымат чыпкаларын колдоно аласыз.

[Бардыгы: 1 Мааниси: 5]

Жазылган Антон Гилдебранд

Антон өзүнүн кесиптештери жана иштеп чыгуучулардын коомчулугу менен код кеңештерин жана чечимдерин бөлүшүүгө ынтызар, толук стекти иштеп чыгуучу. Front-end жана back-end технологияларында бекем билимге ээ болгон Антон ар кандай программалоо тилдерин жана алкактарын жакшы билет. Ал онлайн иштеп чыгуучу форумдардын жигердүү мүчөсү жана башкаларга программалоо көйгөйлөрүн чечүүгө жардам берүү үчүн идеяларды жана чечимдерди үзгүлтүксүз кошуп келет. Бош убактысында Антон бул тармактагы акыркы тенденциялар жана технологиялар боюнча кабардар болуп, жаңы инструменттер жана алкактар ​​менен эксперимент жүргүзүүнү жактырат.

Комментарий калтыруу

Электрондук почта дарегиңиз жарыяланбайт. Милдеттүү талаалар белгиленген *

Эмне деп ойлойсуң?