Többféle jelölőnégyzet értékét többféleképpen tárolhatja egy adatbázisban a Laravelben. Íme néhány lehetőség:
- Használjon „logikai” típusú mezőt : minden jelölőnégyzet "igaz" vagy "hamis" néven menthető el az adatbázis logikai típusú mezőjében.
- Használjon „szöveg” típusú mezőt : az összes bejelölt jelölőnégyzet értékét eltárolhatja egy szövegtípus mezőben, az egyes értékeket vesszővel elválasztva. Például, ha a felhasználó bejelölte a "gyümölcsök" és a "zöldségek" jelölőnégyzetet, ezeket az információkat "gyümölcsök, zöldségek" néven mentheti el egy szöveges mezőben.
- Használjon kapcsolati táblázatot : ha több jelölőnégyzet van ugyanahhoz a rekordhoz kapcsolva, akkor egy relációs táblát használhat az adatok tárolására. Például, ha van egy „termékek” táblázata „kategóriák” oszloppal, létrehozhat egy „product_categories” táblázatot, amely összekapcsolja a kiválasztott kategóriákat az egyes termékekkel.
- Használjon „tábla” típusú mezőt : Ha olyan adatbázist használ, amely támogatja a tömböket (például a PostgreSQL-t), akkor több jelölőnégyzet értékeit is tárolhatja egy tömbtípus mezőben. Ez lehetővé teszi több érték tárolását egyetlen mezőben anélkül, hogy kapcsolati táblázatot kellene használnia.
Tartalomjegyzék
Tároljon több jelölőnégyzet értéket egy adatbázisban egy tömb segítségével
A Laravelben több jelölőnégyzet értéket is tárolhat egy adatbázisban úgy, hogy egy tömb segítségével egyetlen mezőben tárolja az értékeket. Íme egy példa, hogyan teheti meg:
1. Hozzon létre egy áttelepítést egy mező hozzáadásához az adatbázistáblához a jelölőnégyzetek értékeinek tárolására. Például, ha az értékeket egy "beállítások" nevű mezőben szeretné tárolni, használhatja a következő áttelepítést:
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. Az űrlapon hozzon létre jelölőnégyzeteket minden menteni kívánt opcióhoz. Például :
<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. Az űrlapbeküldés feldolgozási logikájában kérje le a kiválasztott jelölőnégyzetek értékeit, és tárolja azokat az adatbázisban. Például :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Ez JSON-kódolású tömbként tárolja a kiválasztott jelölőnégyzetek értékeit a „beállítások” mezőben. Ezután lekérheti és megjelenítheti a kiválasztott értékeket a JSON-tömb dekódolásával, amikor lekéri a rekordot az adatbázisból.
$model = Model::find($id);
$options = json_decode($model->options);
Mintakódok több jelölőnégyzet értékének tárolására a Laravelben
Íme néhány mintakód több jelölőnégyzet értékének tárolására a Laravel adatbázisban:
Használjon „logikai” típusú mezőt
A „subscription_newsletter” logikai oszlop létrehozása a „users” táblázatban:
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
A felhasználó hírlevélre való feliratkozásának regisztrációja az űrlap elküldésekor:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Használjon „szöveg” típusú mezőt
Az "options_sélectionées" szövegtípusú oszlop létrehozása a "felmérés" táblázatban:
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
A felhasználó által az űrlap elküldésekor kiválasztott opciók mentése:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Használjon kapcsolati táblázatot
A "categories_products" tábla létrehozása az "id_product" és az "id_category" oszlopokkal:
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
A felhasználó által az űrlap elküldésekor kiválasztott kategóriák mentése:
$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();
}
Használjon „tábla” típusú mezőt
Táblázat típusú "options_selected" oszlop létrehozása a "poll" táblában (ha PostgreSQL-t használ):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
A felhasználó által az űrlap elküldésekor kiválasztott opciók mentése:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
Fontos megjegyezni, hogy minden esetben meg kell győződnie arról, hogy a jelölőnégyzetek értékeit megfelelően ellenőrizték és kitisztították, mielőtt elmentenék őket az adatbázisba. Ehhez használhatja a Laravel érvényesítő vezérlőit és adatszűrőit.