Există mai multe moduri de a stoca valorile mai multor casete de selectare într-o bază de date în Laravel. Iată câteva opțiuni:
- Utilizați un câmp de tip „boolean”. : fiecare casetă de selectare poate fi salvată ca „adevărat” sau „fals” într-un câmp de tip boolean din baza de date.
- Utilizați un câmp de tip „text”. : puteți stoca valorile tuturor casetelor de selectare bifate într-un câmp de tip text, separând fiecare valoare cu o virgulă. De exemplu, dacă utilizatorul a bifat casetele „fructe” și „legume”, puteți salva aceste informații ca „fructe, legume” într-un câmp de tip text.
- Utilizați un tabel de relații : dacă aveți mai multe casete de selectare care sunt legate la aceeași înregistrare, puteți utiliza un tabel de relații pentru a stoca aceste date. De exemplu, dacă aveți un tabel „produse” cu o coloană „categorii”, puteți crea un tabel „categorii_produse” care leagă categoriile selectate de fiecare produs.
- Utilizați un câmp de tip „tabel”. : Dacă utilizați o bază de date care acceptă matrice (cum ar fi PostgreSQL), puteți stoca valorile mai multor casete de selectare într-un câmp de tip matrice. Acest lucru vă va permite să stocați mai multe valori într-un singur câmp fără a fi nevoie să utilizați un tabel de relații.
Cuprins
Stocați mai multe valori ale casetei de selectare într-o bază de date folosind o matrice
În Laravel, puteți stoca mai multe valori ale casetei de selectare într-o bază de date utilizând o matrice pentru a stoca valorile într-un singur câmp. Iată un exemplu despre cum puteți face acest lucru:
1. Creați o migrare pentru a adăuga un câmp la tabelul bazei de date pentru a stoca valorile casetei de selectare. De exemplu, dacă doriți să stocați valorile într-un câmp numit „opțiuni”, puteți utiliza următoarea migrare:
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. În formularul dvs., creați casete de selectare pentru fiecare opțiune pe care doriți să o salvați. De exemplu :
<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. În logica de procesare a trimiterii formularului, preluați valorile casetelor de selectare selectate și stocați-le în baza de date. De exemplu :
$options = $request->input('options');
$model = new Model();
$model->options = json_encode($options);
$model->save();
Aceasta stochează valorile casetelor de selectare selectate în câmpul „opțiuni” ca o matrice codificată JSON. Apoi puteți prelua și afișa valorile selectate prin decodarea matricei JSON atunci când preluați înregistrarea din baza de date.
$model = Model::find($id);
$options = json_decode($model->options);
Exemple de coduri pentru a stoca mai multe valori ale casetei de selectare în Laravel
Iată câteva exemple de coduri pentru stocarea valorilor mai multor casete de selectare într-o bază de date în Laravel:
Utilizați un câmp de tip „boolean”.
Crearea coloanei booleene „subscription_newsletter” în tabelul „utilizatori”:
Schema::table('utilisateurs', function (Blueprint $table) {
$table->boolean('abonnement_newsletter')->default(0);
});
Înregistrarea abonamentului utilizatorului la newsletter la trimiterea formularului:
$utilisateur = new Utilisateur;
$utilisateur->abonnement_newsletter = $request->input('abonnement_newsletter');
$utilisateur->save();
Utilizați un câmp de tip „text”.
Crearea coloanei „options_sélectionées” de tip text în tabelul „survey”:
Schema::table('sondage', function (Blueprint $table) {
$table->text('options_sélectionnées');
});
Salvarea opțiunilor selectate de utilizator la trimiterea formularului:
$sondage = new Sondage;
$sondage->options_sélectionnées = implode(',', $request->input('options'));
$sondage->save();
Utilizați un tabel de relații
Crearea tabelului „categorii_produse” cu coloanele „id_product” și „id_category”:
Schema::create('catégories_produits', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('id_produit');
$table->integer('id_catégorie');
$table->timestamps();
});
Salvarea categoriilor selectate de utilizator la trimiterea formularului:
$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();
}
Utilizați un câmp de tip „tabel”.
Crearea coloanei „options_selected” de tip tabel în tabelul „poll” (dacă utilizați PostgreSQL):
Schema::table('sondage', function (Blueprint $table) {
$table->jsonb('options_sélectionnées');
});
Salvarea opțiunilor selectate de utilizator la trimiterea formularului:
$sondage = new Sondage;
$sondage->options_sélectionnées = $request->input('options');
$sondage->save();
Este important să rețineți că, în orice caz, va trebui să vă asigurați că valorile casetei de selectare sunt validate și curățate corespunzător înainte de a fi salvate în baza de date. Puteți utiliza controlerele de validare și filtrele de date ale Laravel pentru aceasta.