اذهب إلى المحتوى
  • 0

كيف نتعامل مع checkbox , selection التي تحوي عدة قيم في laravel

Hafsa Aly

السؤال

السلام عليكم ورحمه الله

كيف اقوم بعمل إضافة حقول في ال registration form في laravel 7   وهذه الحقول تكون selection أو checkbox تجلب بياناتها من الdb

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

عندما نريد تمرير عدة قيم من HTML نضع أقواس مربعة [] مع اسم الخاصية name;

المثال خاص ب category..

<div class="form-group">
  <label><strong>Category :</strong></label><br>
  <label><input type="checkbox" name="category[]" value="Laravel"> Laravel</label>
  <label><input type="checkbox" name="category[]" value="JQuery"> JQuery</label>
  <label><input type="checkbox" name="category[]" value="Bootstrap"> Bootstrap</label>
  <label><input type="checkbox" name="category[]" value="Codeigniter"> Codeigniter</label>
  <label><input type="checkbox" name="category[]" value="JQuery UI"> JQuery UI</label>
</div> 

يمكنك ملاحظة:

name="category[]"

ضمن ملف التهجير، يمكن تحديد نوع القيمة ك string:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('category');
            $table->longText('description');
            $table->timestamps();
        });
    }

}

ثم في model نحدد دالة لإسناد القيمة و جلبها..

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['name','category','description'];

    public function setCategoryAttribute($value)
    {
        $this->attributes['category'] = json_encode($value);
    }

    public function getCategoryAttribute($value)
    {
        return $this->attributes['category'] = json_decode($value);
    }
}

حيث كما تلاحظين، نتبع العرف في التسمية في الدوال ليكون getCategoryAttribute - setCategoryAttribute

ونتعامل مع المتغيرات كغرض JSON الذي يتم تخزينه كنص في قاعدة البيانات.

باقِ الأجزاء تعمل بالطريقة التقليدية بدون تعديل فقط تم الاعتماد على الدالتين ضمن model لعمل طبقة وسيطة و تقوم باتحويل ل JSON.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الأمر بسيط فقط قومي بإتباع بعض الخطوات سأشرحها لك بإستخدام مثال: سنُضيف لإستمارة التسجيل نوع المُستخدم gender:

نُضيف الحقل gender إلى جدول المستخدمين:

أولا نُنشئ ملف تهجير لإضافة الحقل:

php artisan make:migration add_gender_to_users

نفتح ملف التهجير و نضيف الحقل للتابع up:

$table->enum('gender', ['male', 'female', 'others'])->default('male');

و في التابع down نُضيف:

$table->dropColumn('gender');

نقوم بتنفيذ أمر التهجير:

php artisan migrate

نضيف الحقل لإستمارة تسجيل الدخول في الملف register.blade:

<div class="form-group row">
  <label for="gender" class="col-md-4 col-form-label text-md-right">{{ __('Gender') }}</label>

  <div class="col-md-6">
    <select class="form-control @error('gender') is-invalid @enderror" name="gender" id="gender" required>
      <option value="">Select Your Gender</option>
      <option value="male" {{ old('gender') == 'male' ? 'selected' : '' }}>Male</option>
      <option value="female" {{ old('gender') == 'female' ? 'selected' : '' }}>Female</option>
      <option value="others" {{ old('gender') == 'others' ? 'selected' : '' }}>Others</option>
    </select>
    @error('gender')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror
  </div>
</div>

نضيف الحقل gender لمصفوفة fillable في النموذج:

protected $fillable = [
  'name', 'email', 'password', 'gender'
];

بعد ذلك نتحقق من الحقل في المتحكم RegisterController و نضيف الحقل في إنشاء السجل:

'gender' => ['required', 'string', 'in:male,female,others'],

و في الإنشاء:

protected function create(array $data)
{
  return User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'gender' => $data['gender'], // إضافة الحقل
    'password' => Hash::make($data['password']),
  ]);
}

و هكذا بنفس الطريقة يُمكنك إضافة حقول أخرى.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 6/17/2021 at 19:54 قال عبود سمير:

الأمر بسيط فقط قومي بإتباع بعض الخطوات سأشرحها لك بإستخدام مثال: سنُضيف لإستمارة التسجيل نوع المُستخدم gender:

نُضيف الحقل gender إلى جدول المستخدمين:

أولا نُنشئ ملف تهجير لإضافة الحقل:


php artisan make:migration add_gender_to_users

نفتح ملف التهجير و نضيف الحقل للتابع up:


$table->enum('gender', ['male', 'female', 'others'])->default('male');

و في التابع down نُضيف:


$table->dropColumn('gender');

نقوم بتنفيذ أمر التهجير:


php artisan migrate

نضيف الحقل لإستمارة تسجيل الدخول في الملف register.blade:


<div class="form-group row">
  <label for="gender" class="col-md-4 col-form-label text-md-right">{{ __('Gender') }}</label>

  <div class="col-md-6">
    <select class="form-control @error('gender') is-invalid @enderror" name="gender" id="gender" required>
      <option value="">Select Your Gender</option>
      <option value="male" {{ old('gender') == 'male' ? 'selected' : '' }}>Male</option>
      <option value="female" {{ old('gender') == 'female' ? 'selected' : '' }}>Female</option>
      <option value="others" {{ old('gender') == 'others' ? 'selected' : '' }}>Others</option>
    </select>
    @error('gender')
    <span class="invalid-feedback" role="alert">
      <strong>{{ $message }}</strong>
    </span>
    @enderror
  </div>
</div>

نضيف الحقل gender لمصفوفة fillable في النموذج:


protected $fillable = [
  'name', 'email', 'password', 'gender'
];

بعد ذلك نتحقق من الحقل في المتحكم RegisterController و نضيف الحقل في إنشاء السجل:


'gender' => ['required', 'string', 'in:male,female,others'],

و في الإنشاء:


protected function create(array $data)
{
  return User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'gender' => $data['gender'], // إضافة الحقل
    'password' => Hash::make($data['password']),
  ]);
}

و هكذا بنفس الطريقة يُمكنك إضافة حقول أخرى.

شكرا لك . عندي سؤال اخر  في نفس الموضوع اريد اضافة checkbox  في ال registeration form  لاختيار هوايات مع انني اريد معرفة اذا تم اختيار اكثر من هواية كيف يتم حفظها في الdb  ايضا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 دقائق مضت قال Hafsa Aly:

شكرا لك . عندي سؤال اخر  في نفس الموضوع اريد اضافة checkbox  في ال registeration form  لاختيار هوايات مع انني اريد معرفة اذا تم اختيار اكثر من هواية كيف يتم حفظها في الdb  ايضا

لماذا لا تُفكرين في عمل نموذج آخر مثلا Hobby و الربط بينه و بين نموذج User بعلاقة many to many  اي كل مستخدم يُمكن أن يكون له عدة هوايات و الهواية يُمكن أن تنتمي لعدة مُستخدمين، و بهذا الشكل تخزين البيانات سيكون أسهل و البحث و الإستعلام بخصوص الهوايات في المستقبل سيكون أسهل

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...