D'r binne ferskate manieren om de wearden fan meardere karfakjes op te slaan yn in database yn Laravel. Hjir binne wat opsjes:
- Brûk in "boolean" type fjild : elk karfakje kin bewarre wurde as "wier" of "net wier" yn in boolean type fjild yn jo databank.
- Brûk in "tekst" type fjild : jo kinne de wearden fan alle kontroleare karfakjes opslaan yn in teksttypefjild, elke wearde skieden mei in komma. Bygelyks, as de brûker de fakjes "fruchten" en "griente" kontrolearre, kinne jo dizze ynformaasje bewarje as "fruchten, grienten" yn in teksttypefjild.
- Brûk in relaasje tabel : as jo ferskate karfakjes hawwe dy't keppele binne oan deselde record, kinne jo in relaasjetabel brûke om dizze gegevens op te slaan. As jo bygelyks in tabel "produkten" hawwe mei in kolom "kategoryen", kinne jo in tabel "produkt_kategoryen" oanmeitsje dy't de selektearre kategoryen keppele oan elk produkt.
- Brûk in "tabel" type fjild : As jo in databank brûke dy't arrays stipet (lykas PostgreSQL), kinne jo de wearden fan meardere karfakjes opslaan yn in arraytypefjild. Hjirmei kinne jo meardere wearden opslaan yn ien inkeld fjild sûnder in relaasjetabel te brûken.
Bewarje meardere karfakjewearden yn in database mei in array
Yn Laravel kinne jo meardere karfakjewearden opslaan yn in database troch in array te brûken om de wearden yn ien fjild op te slaan. Hjir is in foarbyld fan hoe't jo it kinne dwaan:
1. Meitsje in migraasje om in fjild ta te foegjen oan jo databanktabel foar it bewarjen fan karfakjewearden. As jo bygelyks de wearden wolle opslaan yn in fjild neamd "opsjes", kinne jo de folgjende migraasje brûke:
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. Meitsje yn jo formulier karfakjes foar elke opsje dy't jo bewarje wolle. Bygelyks :
<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. Yn jo logika foar ferwurkjen fan formulier yntsjinje, helje de wearden fan 'e selektearre karfakjes op en bewarje se yn' e database. Bygelyks :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Dit bewarret de wearden fan 'e selektearre karfakjes yn it "opsjes" fjild as in JSON-kodearre array. Jo kinne dan de selekteare wearden ophelje en werjaan troch de JSON-array te dekodearjen as jo it record fan 'e database ophelje.
$model = Model::find($id);
$options = json_decode($model->options);
Sample koades om meardere karfakjeswearden op te slaan yn Laravel
Hjir binne wat foarbyldkoades foar it opslaan fan de wearden fan meardere karfakjes yn in database yn Laravel:
Brûk in "boolean" type fjild
Oanmeitsjen fan de boolean kolom "subscription_newsletter" yn 'e tabel "brûkers":
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
Registraasje fan it abonnemint fan de brûker op de nijsbrief by it yntsjinjen fan it formulier:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Brûk in "tekst" type fjild
Oanmeitsjen fan de kolom "options_sélectionées" fan teksttype yn 'e tabel "enkête":
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
Bewarje de opsjes selektearre troch de brûker by it yntsjinjen fan it formulier:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Brûk in relaasje tabel
Oanmeitsjen fan 'e tabel "categorys_products" mei de kolommen "id_product" en "id_category":
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
Kategoryen opslaan selektearre troch de brûker by it yntsjinjen fan it formulier:
$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();
}
Brûk in "tabel" type fjild
Oanmeitsjen fan de kolom "options_selected" fan tabeltype yn 'e tabel "poll" (as jo PostgreSQL brûke):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
Bewarje de opsjes selektearre troch de brûker by it yntsjinjen fan it formulier:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
It is wichtich om te notearjen dat jo yn alle gefallen moatte soargje dat jo wearden fan jo karfakje goed validearre en sanearre binne foardat se wurde opslein yn jo database. Jo kinne de validaasjekontrôles en gegevensfilters fan Laravel brûke foar dit.