Computer Store Project
سنتعلم في هذه السلسلة من الدروس إن شاء الله كيفية إنشاء متجر إلكتروني وسيكون المتجر خاص ببيع أجهز الكمبيوتر وملحقاته وسيتم تصميم المتجر بإطار العمل لارافيل الاصدار العاشر وسنتعرف على بعض المفاهيم الأساسية المهمة في تصميم مشروعنا
وسيتناول الجزء الأول النقاط التالية:
Table of Contents
أولاً: إنشاء المشروع
سنقوم بفتح برنامج visual studio وننشيء new terminal ثم نكتب الأمر التالي
composer create-project laravel/laravel Computer_store
بعد إنشاء المشروع سوف نقوم بكتابة الأمر التالي للذهاب إلى المشروع
cd Computer_store
ثم لفتح مجلد المشروع في نافذة جديدة نقوم بكتابة الأمر التالي
code .
لقد قمنا بإنشاء المشروع
ثانياً: إنشاء قاعدة البيانات الخاصة بالمشروع
سندخل إلى ملف .env ونجعل اسم قاعدة البيانات computer-store كالتالي
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=computer-store
DB_USERNAME=root
DB_PASSWORD=
سوف نقوم الآن بإنشاء الجداول التي سنحتاجها ويفضل إنشاء مخطط للجداول ERD لمعرفة ماذا نحتاج من الجداول وكم عدد الحقول وشكل العلاقات بين الجداول ويمكن استخدام مواقع تساعدك في رسم المخططات ويفضل أيضاً إنشاء بنية الجداول ونوع الحقول وطريقة إنشاء العلاقات ويمكن استخدام برنامج mysql workbench لإنشاء الجداول بطريقة افتراضية قبل إنشاءها فعلياً في لارافيل وسيتم وضع روابط هذه الأدوات في قائمة المراجع في نهاية الدرس
هذا شكل الجداول بعد إنشاءها بواسطة برنامج workbench
بعد إنشاء مخطط للجداول التي سنحتاجها والعلاقة بينها سنذهب إلى مشروع لارافيل وننشيء هذه الجدوال
1- جدول users وسيتم إنشاءه تلقائياً وسنضيف إليه بعض الحقول التي سنحتاجها كالآتي
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('adress')->nullable();
$table->string('phone')->nullable();
$table->string('role')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
2- جدول categories سكنتب الأمر التالي
php artisan make:migration create_categories_table
وسننشيء الحقول التي نحتاجها داخل الجدول
console.log( 'Code is Poetry' );
public function up(): void
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('category_type');
$table->text('category_notes')->nullable();
$table->timestamps();
});
}
3- جدول products سنكتب الأمر التالي
php artisan make:migration create_ products _table
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('category_id');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
$table->timestamps();
});
}
وكما هو واضح أنشأنا حقل category_id عبارة عن foreign key لإنشاء علاقة one to meny مع حقل id في جدول categories بحيث سيكون لكل category منتج واحد أو مجموعة منتجات
4- جدول products_details سكنتب الأمر التالي
php artisan make:migration create_ products_details _table
وسننشيء الحقول التي نحتاجها داخل الجدول
public function up(): void
{
Schema::create('products_details', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price');
$table->string('quantity');
$table->string('image')->nullable();
$table->unsignedBigInteger('product_id');
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade')->onUpdate('cascade');
$table->string('created_by');
$table->timestamps();
});
}
وكما هو واضح أنشأنا حقل يسمى product_id وهذا الحقل عبارة عن foreign key لإنشاء علاقة one to meny مع حقل id في جدول products
5- جدول orders سنكتب الأمر التالي
php artisan make:migration create_ products_orders _table
public function up(): void
{
Schema::create('products_orders', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('product_id');
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade')->onUpdate('cascade');
$table->unsignedBigInteger('order_id');
$table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade')->onUpdate('cascade');
$table->timestamps();
});
}
وكما هو واضح الجدول سيكون وسيط بين جدولي produtcs و orders لأن بينهما علاقة many to many وسيحتوي على order_id و product_id عبارة عن foreign key لإنشاء العلاقة بينهما
ثالثاً: إنشاء Models الخاصة بالجداول
1- User Model
سندخل إلى user model ونضيف كود يحمي الحقول التي أنشأناها كالتالي
protected $fillable = [
'name',
'email',
'password',
'address',
'phone',
'role',
];
وسنضيف أيضاً في User Model دالة للعلاقة one to meny مع جدول orders التي أنشأناها
public function user()
{
return $this->hasMany(Order::class,'user_id');
}
2- Category Model
سنكتب الكود التالي لإنشائه
php artisan make:model Category
ونضع الكود التالي داخل Category Model
protected $table='categories';
protected $fillable = ['category_type','category_notes'];
public function category()
{
return $this->hasMany(Product::class,'category_id');
}
وكما هو واضح كتبنا كود يحمي حقول جدول categories وأنشأنا دالة للعلاقة one to meny مع جدول products
3- Order_Detail Model
سنكتب الكود التالي لإنشائه
php artisan make:model Order_Detail
ونضع الكود التالي داخل Order_Detail Model
protected $table='orders_details';
protected $fillable = ['price','quantity','discount','order_id'];
public function order()
{
return $this->belongsTo(Order::class,'order_id');
}
وكما هو واضح كتبنا كود يحمي حقول جدول orders_details وأنشأنا دالة للعلاقة one to meny مع جدول orders
4- Order_Detail Model
سنكتب الكود التالي لإنشائه
php artisan make:model Order
ونضع الكود التالي داخل Order Model
protected $table='orders';
protected $fillable = ['user_id'];
public function products()
{
return $this->belongsToMany(Product::class);
}
public function order()
{
return $this->hasMany(Order_Detail::class,'order_id');
}
public function user()
{
return $this->belongsTo(User::class,'user_id');
}
وكما هو واضح كتبنا كود يحمي حقول جدول orders وأنشأنا دالة للعلاقة one to meny مع جدول orders_details ومع جدول users وعلاقة meny to meny مع جدول products
5- Product_Detail Model
سنكتب الكود التالي لإنشائه
php artisan make:model Product_Detail
ونضع الكود التالي داخل Product_Detail Model
protected $table='products_details';
protected $fillable = ['name','price','quantity','image','product_id','created_by'];
public function product()
{
return $this->belongsTo(Product::class,'product_id');
}
وكما هو واضح كتبنا كود يحمي حقول جدول products_details وأنشأنا دالة للعلاقة one to meny مع جدول products
6- Product_Order Model
سنكتب الكود التالي لإنشائه
php artisan make:model Product_Order
ونضع الكود التالي داخل Product_Order Model
protected $table='products_orders';
protected $fillable = ['product_id','order_id'];
7- Product Model
سنكتب الكود التالي لإنشائه
php artisan make:model Product
ونضع الكود التالي داخل Product Model
protected $table = 'products';
protected $fillable = ['category_id', 'stock_id', 'quantity', 'image', 'created_by'];
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
public function orders()
{
return $this->belongsToMany(Order::class);
}
public function product()
{
return $this->hasMany(Product_Detail::class,'product_id');
}
وكما هو واضح كتبنا كود يحمي حقول جدول products وأنشأنا دالة للعلاقة one to meny مع جدول products وجدول category وعلاقة many to many مع جدول orders
وبهذا قد أنشأنا المشروع وقاعدة البيانات والجداول التي سوف نحتاجها في مشروعنا وكذلك العلاقات بين الجداول و models التي سنحتاجها وسنستكمل إنشاء المشروع في الجزء القادم إن شاء الله