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

السؤال

نشر

السلام عليكم,

احاول بناء موقع لبيع بطاقات الهدايا متنوعة(جوجل,ايتونز.امازون...) ,باطار العمل لارافيل كأول مشروع لي.
 هل هذه هي الطريقة الصحيحة , ام يوجد طريقة اسهل لربط الاكواد بمنتج (بطاقة) حيث سيملك كل منتج العديد من الاكواد؟

 

hasoub0.png.46b03c2a68c1e3fd29848df48442a97b.png

Recommended Posts

  • 0
نشر

مرحباً إسماعيل،

إذا كان لكل مُنتج عدة أكواد فالعلاقة التي تربط المنتج بالكود هي واحد لمُتعدد (hasMany) و بما أن كل كود ينتمي لمُنتج واحد فالعلاقة في النموذج (Code) ستكون (belongsTo):

لم أفهم ماذا يعني الحقل number_of_products وهل في الموقع الخاص بك المُستخدم سيشتري الأكواد أم ماذا؟ أي أن نتيجة عملية الشراء سيتحصل عل أحد أكواد المنتج ؟

إذا كان المُستخدم سيحصل في الأخير على كود من هذه الأكواد فأقترح إضافة حقل جديد purchased_at لجدول codes:

$table->datetime('purchased_at')->nullable();

لتخزين وقت الشراء. و يُمكن أيضاً إضافة حقل user_id لتخزين مُعرف المُستخدم الذي قام بشراء الكود و جعله null إفتراضياً.

العلاقات ستكون بهذا الشكل: 

النموذج Product:

<?php

class Product extends Model{
 
  
  // ...
  
  
  public function codes()
  {
    return $this->hasMany(Code::class);
  }


  public function purchasedCodes()
  {
    return $this->hasMany(Code::class)->whereNotNull('purchased_at');
  }
  
}

أما النموذج Code:

<?php

class Code extends Model {
  
  // ...
  
  public function product()
  {
    return $this->belongsTo(Product::class);
  }
  
  public function purchased_by()
  {
    return $this->belongsTo(User::class, 'user_id');
  }
  
}

يُمكن أيضاً إضافة جدول و نموذج آخر للمشتريات (purchases) و تربط النموذج Purchase بكل من النموذج User و Code:

<?php

class Purchase extends Model {
  
  // ...
  
  public function user()
  {
    return $this->belongsTo(User::class, 'user_id');
  }

  public function code()
  {
    return $this->belongsTo(Code::class, 'code_id');
  }

}

بالتوفيق.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...