Ёсць некалькі спосабаў захоўвання значэнняў некалькіх сцяжкоў у базе дадзеных у Laravel. Вось некалькі варыянтаў:
- Выкарыстоўвайце поле тыпу "булева". : кожны сцяжок можа быць захаваны як "true" або "false" у полі лагічнага тыпу ў вашай базе дадзеных.
- Выкарыстоўвайце поле тыпу «тэкст». : вы можаце захоўваць значэнні ўсіх адзначаных сцяжкоў у тэкставым полі тыпу, падзяляючы кожнае значэнне коскай. Напрыклад, калі карыстальнік паставіў галачку ў полі "садавіна" і "гародніна", вы можаце захаваць гэтую інфармацыю як "садавіна, гародніна" ў тэкставым полі.
- Выкарыстоўвайце табліцу адносін : калі ў вас ёсць некалькі сцяжкоў, звязаных з адным і тым жа запісам, вы можаце выкарыстоўваць табліцу адносін для захавання гэтых даных. Напрыклад, калі ў вас ёсць табліца «products» са слупком «categories», вы можаце стварыць табліцу «product_categories», якая звязвае выбраныя катэгорыі з кожным прадуктам.
- Выкарыстоўвайце поле тыпу «табліца». : Калі вы выкарыстоўваеце базу дадзеных, якая падтрымлівае масівы (напрыклад, PostgreSQL), вы можаце захоўваць значэнні некалькіх сцяжкоў у полі тыпу масіва. Гэта дазволіць вам захоўваць некалькі значэнняў у адным полі без выкарыстання табліцы адносін.
Змест
Захоўвайце некалькі значэнняў сцяжкоў у базе дадзеных з дапамогай масіва
У Laravel вы можаце захоўваць некалькі значэнняў сцяжкоў у базе дадзеных, выкарыстоўваючы масіў для захоўвання значэнняў у адным полі. Вось прыклад таго, як вы можаце гэта зрабіць:
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
Вось некалькі прыкладаў кодаў для захавання значэнняў некалькіх сцяжкоў у базе дадзеных у Laravel:
Выкарыстоўвайце поле тыпу "булева".
Стварэнне лагічнага слупка “subscription_newsletter” у табліцы “users”:
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();
Выкарыстоўвайце табліцу адносін
Стварэнне табліцы «categories_products» са слупкамі «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" таблічнага тыпу ў табліцы "poll" (пры выкарыстанні 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.