راه های مختلفی برای ذخیره مقادیر چک باکس های متعدد در پایگاه داده در لاراول وجود دارد. در اینجا چند گزینه وجود دارد:
- از یک فیلد نوع "بولی" استفاده کنید : هر چک باکس را می توان به عنوان "درست" یا "نادرست" در یک فیلد نوع بولی در پایگاه داده شما ذخیره کرد.
- از یک فیلد نوع "متن" استفاده کنید : می توانید مقادیر تمام چک باکس های علامت زده را در یک فیلد نوع متن ذخیره کنید و هر مقدار را با کاما جدا کنید. برای مثال، اگر کاربر کادرهای «میوهها» و «سبزیجات» را علامت زده باشد، میتوانید این اطلاعات را بهعنوان «میوه، سبزیجات» در فیلد نوع متن ذخیره کنید.
- از جدول رابطه استفاده کنید : اگر چندین چک باکس دارید که به یک رکورد مرتبط هستند، می توانید از جدول رابطه برای ذخیره این داده ها استفاده کنید. به عنوان مثال، اگر یک جدول «محصولات» با ستون «دستهها» دارید، میتوانید جدول «دستههای_product» ایجاد کنید که دستههای انتخابشده را به هر محصول پیوند میدهد.
- از یک فیلد نوع "جدول" استفاده کنید : اگر از پایگاه داده ای استفاده می کنید که از آرایه ها پشتیبانی می کند (مانند PostgreSQL)، می توانید مقادیر چند چک باکس را در یک فیلد نوع آرایه ذخیره کنید. این به شما امکان می دهد چندین مقدار را در یک فیلد واحد بدون نیاز به استفاده از جدول رابطه ذخیره کنید.
فهرست مطالب
مقادیر چند چک باکس را با استفاده از یک آرایه در یک پایگاه داده ذخیره کنید
در لاراول، می توانید چندین مقدار چک باکس را با استفاده از یک آرایه برای ذخیره مقادیر در یک فیلد ذخیره کنید. در اینجا مثالی از نحوه انجام این کار آورده شده است:
1. یک مهاجرت برای اضافه کردن فیلدی به جدول پایگاه داده خود برای ذخیره مقادیر چک باکس ایجاد کنید. به عنوان مثال، اگر می خواهید مقادیر را در فیلدی به نام "options" ذخیره کنید، می توانید از مهاجرت زیر استفاده کنید:
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);
نمونه کدهایی برای ذخیره چندین مقدار چک باکس در لاراول
در اینجا چند کد نمونه برای ذخیره مقادیر چک باکس های متعدد در یک پایگاه داده در لاراول آورده شده است:
از یک فیلد نوع "بولی" استفاده کنید
ایجاد ستون بولی «subscription_newsletter» در جدول «کاربران»:
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" از نوع متن در جدول "survey":
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" از نوع جدول در جدول "نظرسنجی" (اگر از 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();
توجه به این نکته ضروری است که در هر صورت، باید اطمینان حاصل کنید که مقادیر چک باکس شما قبل از ذخیره در پایگاه داده شما به درستی تایید و پاک شده است. برای این کار می توانید از کنترلرهای اعتبارسنجی لاراول و فیلترهای داده استفاده کنید.