Computer Store

Computer Store Project

Computer Store Project

سنتعلم في هذه السلسلة من الدروس إن شاء الله كيفية إنشاء متجر إلكتروني وسيكون المتجر خاص ببيع أجهز الكمبيوتر وملحقاته وسيتم تصميم المتجر بإطار العمل لارافيل الاصدار العاشر وسنتعرف على بعض المفاهيم الأساسية المهمة في تصميم مشروعنا

وسيتناول الجزء الأول النقاط التالية:

Table of Contents

أولاً: إنشاء المشروع

سنقوم بفتح برنامج visual studio وننشيء new terminal ثم نكتب الأمر التالي

				
					composer create-project laravel/laravel Computer_store  
				
			

بعد إنشاء المشروع سوف نقوم بكتابة الأمر التالي للذهاب إلى المشروع

				
					cd Computer_store
				
			

ثم لفتح مجلد المشروع في نافذة جديدة نقوم بكتابة الأمر التالي

				
					code .
				
			
Computer Store Project

لقد قمنا بإنشاء المشروع

ثانياً: إنشاء قاعدة البيانات الخاصة بالمشروع

سندخل إلى ملف .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

Computer Store Project

بعد إنشاء مخطط للجداول التي سنحتاجها والعلاقة بينها سنذهب إلى مشروع لارافيل وننشيء هذه الجدوال

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 التي سنحتاجها وسنستكمل إنشاء المشروع في الجزء القادم إن شاء الله

رابعاً: المراجع والروابط

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top