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

كيف نقوم بعمل العلاقة Many To Many في لارافيل ؟

Hafsa Aly

السؤال

Recommended Posts

  • 0

يمكن تلخيص الية إنشاءها وفق الخطوات التالية , سنقوم بتعريف العلاقة كمثال بين النموذجين Category و Product : 

  1. بداية نحتاج إنشاء الجداول و النماذج المراد إنشاء العلاقة بينهما : 
    php artisan make:model Category -m
    php artisan make:model Product -m

     

  2. سنحتاج أيضا إنشاء جدول وسيط لتحقيق منطق العملية . بحيث يجب أن يتكون اسم الجدول الوسيط من أسماء فردية لكلا الجدولين ، مفصولة برموز شرطة سفلية ، ويجب ترتيب هذه الأسماء بترتيب أبجدي ، لذلك يجب أن يكون لدينا category_product ، وليس product_category :

    php artisan make:migration create_category_product_table

     

  3. بعد ذلك سنحتاج التأكد من تعريف الحقول اللازمة في ملف تهجير هذا الجدول الوسيط , بحيث يجب أن يمتلك حقلا أجنبيا يعبر عن عمود المعرف id في كلا الجدولين : products و categories :

public function up()
    {
        Schema::create('category_product', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('category_id')->unsigned();
            $table->integer('product_id')->unsigned();
        });
    }

   4. تنفيذ أمر التهجير : 

php artisan migrate

   5. تعريف العلاقات في ملفات النماذج : 

بداخل ملف النموذج Product.php :

class Product extends Model
{
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
}

و أيضا بداخل ملف النموذج Category.php : 

class Category extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class);
    }
}

  6. ثم كخطوة أخيرة لن يكون علينا إلا احترام العلاقة عند إنشاء أي صفوف بقواعد البيانات و القراءة عن طريق العلاقتين products و categories .

$productsOfXCategory = Category::find($ID)->products;


$categoriesOfXProduct = Product::find($ID)->categories;

  

 

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

  • 0
بتاريخ 20 دقائق مضت قال Adnane Kadri:

يمكن تلخيص الية إنشاءها وفق الخطوات التالية , سنقوم بتعريف العلاقة كمثال بين النموذجين Category و Product : 

  1. بداية نحتاج إنشاء الجداول و النماذج المراد إنشاء العلاقة بينهما : 
    
    php artisan make:model Category -m
    php artisan make:model Product -m

     

  2. سنحتاج أيضا إنشاء جدول وسيط لتحقيق منطق العملية . بحيث يجب أن يتكون اسم الجدول الوسيط من أسماء فردية لكلا الجدولين ، مفصولة برموز شرطة سفلية ، ويجب ترتيب هذه الأسماء بترتيب أبجدي ، لذلك يجب أن يكون لدينا category_product ، وليس product_category :

    
    php artisan make:migration create_category_product_table

     

  3. بعد ذلك سنحتاج التأكد من تعريف الحقول اللازمة في ملف تهجير هذا الجدول الوسيط , بحيث يجب أن يمتلك حقلا أجنبيا يعبر عن عمود المعرف id في كلا الجدولين : products و categories :


public function up()
    {
        Schema::create('category_product', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('category_id')->unsigned();
            $table->integer('product_id')->unsigned();
        });
    }

   4. تنفيذ أمر التهجير : 


php artisan migrate

   5. تعريف العلاقات في ملفات النماذج : 

بداخل ملف النموذج Product.php :


class Product extends Model
{
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
}

و أيضا بداخل ملف النموذج Category.php : 


class Category extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class);
    }
}

  6. ثم كخطوة أخيرة لن يكون علينا إلا احترام العلاقة عند إنشاء أي صفوف بقواعد البيانات و القراءة عن طريق العلاقتين products و categories .


$productsOfXCategory = Category::find($ID)->products;


$categoriesOfXProduct = Product::find($ID)->categories;

  

 

شكرا لك ولكن لم افهم الخطوة السادسة

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

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

شكرا لك ولكن لم افهم الخطوة السادسة

تعبر الخطوة السادسة عن طريقة القراءة بإستعمال هاته العلاقة فقط , ففي المثالين تم على الترتيب جلب :

  • المنتجات التي تخص الفئة X . 
  • الفئات التي تخص المنتج Y .  

مثال : 

  • المنتجات التي تخص الفئة "ملابس رجالية" .
  • الفئات التي تخص المنتج "تيشرت أزرق" .
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...