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

كيفية تخزين اكواد بطاقات الهدايا في قاعدة البيانات؟

اسماعيل صدوقي

السؤال

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

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

 

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...