tejariapp-new-logotejariapp-new-logotejariapp-new-logotejariapp-new-logo
  • صفحه اصلی
  • پروژه ها
    • پروژه طراحی سایت
    • پروژه های اندروید
    • پروژه های تحت ویندوز
    • UI & UX
    • ربات تلگرام
  • سفارش پروژه
    • انجام پروژه اندروید (Android)
    • طراحی و ساخت اپلیکیشن موبایل
    • انجام پروژه طراحی سایت با php
    • انجام پروژه طراحی سایت با Asp.net
    • انجام پروژه سی شارپ
    • فرم سفارش پروژه
  • مدرسه ی تجاری اپ
    • طراحی سایت
    • اندروید
    • سی شارپ
    • آموزش پایگاه داده
    • برنامه های کاربردی
  • لینک های مفید
    • پرداخت آنلاین
    • درباره تجاری اپ
    • تماس با ما
استخدام برنامه نویس متلب
سفارش پروژه
✕
            هیچ نتیجه ای یافت نشدمشاهده همه نتایج

            معرفی رابطه یک به چند One To Many در لاراول

            • صفحه نخست
            • مدرسه ی تجاری اپ آموزش طراحی سایت
            • معرفی رابطه یک به چند One To Many در لاراول
            معرفی رابطه یک به یک (One To One) در لاراول
            معرفی رابطه یک به یک (One To One) در لاراول
            13 خرداد 1398
            ساخت dependency برای کتابخانه اندروید در گیت هاب با jitpack
            ساخت dependency برای کتابخانه اندروید در گیت هاب با jitpack
            15 خرداد 1398
            منتشر شده توسط مدیر سایت
            معرفی رابطه یک به چند One To Many در لاراول

            معرفی رابطه یک به چند One To Many در لاراول

            آموزش رابطه یک به چند در لاراول ، در این پست از تجاری اپ قصد داریم به معرفی رابطه One To Many در لاراول بپردازیم و در قالب یک مثال به شما رابطه One To Many در لاراول را آموزش دهیم.با ما همراه باشید.

            رابطه یک به چند One To Many در لاراول

            در این پست همراه با یک مثال ما خواهیم دید که چگونه می توان یک رابطه One To Many در لاراول ایجاد کرد.

            رابطه یک به چند (One To Many) چیست؟

            رابطه یک به چند یا One To Many که با عنوان hasMany نیز شناخته شده است یک ردیف از یک جدول در پایگاه داده را به چندین ردیف از جداول دیگری در پایگاه داده متصل می کند.

            در Eloquent لاراول یک مدل می تواند دارای چندین مدل باشد که رابطه یک به چند است.به عنوان مثال ، در سناریو یک فروشگاه الکترونیکی یک مدل Brand می تواند دارای چندین مدل Product باشد و یک مدل Product معلق به یک مدل Brand می باشد. دیاگرام مربوط به این رابطه را در زیر مشاهده می کنید:

            رابطه یک به چند One To Many در لاراول
            رابطه یک به چند One To Many در لاراول

            رابطه یک به چند همانند رابطه یک به یک ساده می باشد.که ما قبلا در وب سایت تجاری اپ رابطه یک به یک در لاراول را آموزش دادیم.در این پست ما با یک مثال ساده و در عین حال عملی رابطه One To Many را به شما آموزش خواهیم داد.

            ایجاد مدل ها و Migration ها

            برای پیاده سازی رابطه یک به چند در لاراول ما به دو جدول در پایگاه داده نیاز داریم: products و brands

            توجه:
            ما با این فرض آموزش را ادامه می دهیم که شما لاراول جدیدی را نصب کرده اید و تنظیمات مربوط به پایگاه داده در فایل .env را نیز انجام داده اید.

            برای این کار می توانید در صورت نیاز از آموزشی که ما قبلا در ابن رابطه در سایت قرار داده ایم استفاده کنید: آموزش نصب لاراول به همراه تنظیمات اولیه

            برای ایجاد مدل ها و migration ها دو دستور زیر را در ترمینال خود اجرا کنید:

            php artisan make:model Brand -m
            php artisan make:model Product -m
            

            با اجرای دستور بالا دو مدل با نام های Brand و Product در فولدر app پروژه لاراول شما ایجاد خواد شد.همچنین اگر به پوشه database/migrations بروید دو migration جدیدی که ایجاد شده را مشاهده خواهید کرد

            مدل ها و migration هایی که اخیرا ایجاد کردید مانند زیر خواهند بود:

            Brand Model :

            // Brand Model
            namespace App;
            
            use Illuminate\Database\Eloquent\Model;
            
            class Brand extends Model
            {
                //
            }
            

            Brand Migration:

            // Brand Migration
            use Illuminate\Support\Facades\Schema;
            use Illuminate\Database\Schema\Blueprint;
            use Illuminate\Database\Migrations\Migration;
            
            class CreateBrandsTable extends Migration
            {
                /**
                 * Run the migrations.
                 *
                 * @return void
                 */
                public function up()
                {
                    Schema::create('brands', function (Blueprint $table) {
                        $table->bigIncrements('id');
                        $table->timestamps();
                    });
                }
            
                /**
                 * Reverse the migrations.
                 *
                 * @return void
                 */
                public function down()
                {
                    Schema::dropIfExists('brands');
                }
            }
            

            Product Model:

            // Product Model
            namespace App;
            
            use Illuminate\Database\Eloquent\Model;
            
            class Product extends Model
            {
                //
            }
            

            Product Migration:

            // Product Migration
            use Illuminate\Support\Facades\Schema;
            use Illuminate\Database\Schema\Blueprint;
            use Illuminate\Database\Migrations\Migration;
            
            class CreateProductsTable extends Migration
            {
                /**
                 * Run the migrations.
                 *
                 * @return void
                 */
                public function up()
                {
                    Schema::create('products', function (Blueprint $table) {
                        $table->bigIncrements('id');
                        $table->timestamps();
                    });
                }
            
                /**
                 * Reverse the migrations.
                 *
                 * @return void
                 */
                public function down()
                {
                    Schema::dropIfExists('products');
                }
            }
            

            بعد از اینکه مدل ها و migration ها را ایجاد کردید متد up() در migration های brand و product را مانند زیر بروزرسانی کنید:

            /**
             * Run the migrations.
             *
             * @return void
             */
            public function up()
            {
                Schema::create('brands', function (Blueprint $table) {
                    $table->bigIncrements('id');
                    $table->string('name');
                    $table->text('description');
                    $table->timestamps();
                });
            }
            

            در کد بالا، ما چند فیلد به جدول brand اضافه کردیم.

            /**
             * Run the migrations.
             *
             * @return void
             */
            public function up()
            {
                Schema::create('products', function (Blueprint $table) {
                    $table->bigIncrements('id');
                    $table->integer('brand_id')->unsigned();
                    $table->foreign('brand_id')
                      ->references('id')->on('brands')
                      ->onDelete('cascade');
                    $table->string('name');
                    $table->string('slug');
                    $table->double('price');
                    $table->integer('qty');
                    $table->text('description');
                    $table->timestamps();
                });
            }
            

            در کدهای بالا، ما چند فیلد table به جدول products اضافه کرده ایم. یک مورد که باید در کدهای بالا به آن توجه کنید ستون brand_id است که یک کلید خارجی برای ستون Id جدول brands می باشد.

            اکنون دستور زیر را برای ایجاد جداول brands و products در پایگاه داده اجرا کنید:

            php artisan migrate
            

            تعریف رابطه One To Many در لاراول:

            پس از ایجاد جداول brands و products ، به سراغ تعریف رابطه یک به چند در مدل ها می رویم.

            فایل مدل app/Brand.php را باز کنید و یک تابع جدید با نام products() به آن اضافه کنید ، این تابع رابطه hasMany را بر می گرداند.مانند زیر:

            // Brand Model
            namespace App;
            
            use Illuminate\Database\Eloquent\Model;
            
            class Brand extends Model
            {
                public function products()
                {
                	return $this->hasMany(Product::class);
                }
            }
            

            توجه:
            برای مدل Brand یک رابطه one to many بازگردانده می شود که بیش از یک رکورد از مدل Product را بر می گرداند  ، به همین دلیل ما تابع را به صورت جمع یعنی products نامگذاری کردیم.در ادامه و زمانی که ما رابطه معکوس یک به چند را در مدل Product تعریف می کنیم ما از یک اسم مفرد مانند brand برای تابع استفاده می کنیم.هر محصول یا product دارای یک brand است به همین دلیل ما باید از اسم مفرد استفاده کنیم.

            همانطور که می بینید در متد products() رابطه hasMany با مدل Product تعریف کرده ایم.

            تعریف معکوس رابطه یک به چند در لاراول

            همانطور که ما رابطه hasMany در مدل Brand تعریف کردیم که رکوردهای مربوط به مدل Product را برمی گرداند ، می توانیم رابطه معکوس نیز در مدل Product تعریف کنیم.

            فایل مدل app/Product.php را باز کنید و یک تابع جدید با نام brand() به آن اضافه کنید ، این تابع برند مربوط به یک محصول را برمی گرداند.مانند زیر:

            // Product Model
            namespace App;
            
            use Illuminate\Database\Eloquent\Model;
            
            class Product extends Model
            {
                public function brand()
                {
                	return $this->belongsTo(Brand::class);
                }
            }
            

            همانطور که می بینید، در متد brand() رابطه belongs to برگردانده می شود که برند مرتبط با محصول را باز می گرداند.

            ایجاد رابطه یک به چند

            برای ایجاد یک ارتباط بین دو مدل یا مرتبط کردن آنها ابتدا می توان یک آبجکت فرزند ایجاد کرد و سپس آن را با استفاده از آبجکت والد ذخیره کرد.

            ابزار Tinker در لاراول:
            ابزار Tinker برای مدیریت پایگاه داده متصل به پروژه لاراول به این فریمورک اضافه شده است. اگر تنظیمات پایگاه داده را در پروژه لاراول خود به درستی انجام داده باشید می‌توانید از ابزار Tinker برای افزودن ، ویرایش و حذف اطلاعات استفاده کنیم.

            با دستور زیر ابزار Tinker را باز می‌کنیم:

            php artisan tinker
            
            $brand = Brand::find(1);
            
            $product = new Product;
            $product->name = 'J5 pro';
            $product->slug = 'j5-pro';
            $product->price = '2000000';
            $product->qty = 20;
            $product->description = 'گوشی جی 5 پرو یکی از گوشی های برند سامسونگ می باشد!';
            
            // Saving related model
            $brand->products()->save($product);
            

            ما همچنین می توانیم از متد saveMany () به جای save () استفاده کنیم.

            بازیابی داده رابطه یک به چند

            هنگامی که رابطه ای را در مدل ها تعریف می کنیم ، می توانیم از مدل ها برای بازیابی رکوردهای مرتبط استفاده کنیم.هنگامی که رابطه ای را در مدل ها تعریف می کنیم ، می توانیم از مدل ها برای بازیابی رکوردهای مرتبط استفاده کنیم. در مثال ما ، برای یک برند خاص می توانیم از متد products() استفاده کنیم تا کلیه محصولات مرتبط با یک برند را بدست آوریم.

            $brand = Brand::find(1);
            $products = $brand->products;
            

            هنگامی که ما سعی می کنیم محصولاتی را برای یک برند بدست آوریم ، لاراول به واسطه ID برند که در جدول products و در ستون brand_id این جدول می باشد (یک کلید خارجی می باشد) تمام محصولاتی که ID مربوط به برند آنها مطابق با ID برند موردنظر باشد را می گیرد.

            به همین ترتیب ، می توانیم معکوس مدل رابطه را بازیابی کنیم.

            $product = Product::find(1);
            $brand = $product->brand;
            dd($brand->name);
            

            برای معکوس رابطه یک به چند، لاراول به واسطه ID برند در جدول brands رکوردهایی که مطابقت دارد را بر می گرداند.

            فیلتر کردن رابطه یک به چند

            ممکن است بخواهیم رکوردهای مرتبط را فیلتر کنیم و همچنین بخواهیم آنها را هنگام بازیابی مرتب کنیم.ما می توانیم در کوئری بازیابی خود ، متدها را بصورت زنجیره ای و متصل به هم بنویسم.

            $brand = Brand::find(1);
            $products = $brand->products()
            			->where('price', '>', '2500000')
            			->orderBy('name', 'asc')
            			->get();
            

            در کوئری بالا ما همه ی محصولات مربوط به یک برند را گرفتیم.(البته جایی که قیمت هر محصول بیش از 2500000 باشد و رکوردها براساس نام به صورت صعودی مرتب می شوند)

            حذف یک رابطه One To Many

            حذف یک رابطه یک به چند مشابه ایجاد یک رابطه One To Many می باشد.ابتدا آبجکت parent که brand هست را می گیریم و سپس از متد products() برای حذف همه ی محصولات استفاده می کنیم. به عنوان مثال کد زیر را برای حذف همه محصولات برای یک برند خاص استفاده می کنیم :

            $brand = Brand::find(1);
            $brand->products()->delete();
            

            امیدوارم این آموزش به شما کمک کرده باشد.

            اشتراک گذاری

            پست های مرتبط

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            دستورات جریان کنترل (Control flow statements) یا دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت Dart

            30 بهمن 1400

            دستورات شرطی و حلقه ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت یا Dart

            30 بهمن 1400

            آموزش عملگرها یا Operator ها در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب
            توابع در زبان برنامه نویسی دارت (Dart)

            توابع در زبان برنامه نویسی دارت (Dart)

            27 بهمن 1400

            توابع در زبان برنامه نویسی دارت (Dart)


            ادامه مطلب

            دیدگاهتان را بنویسید لغو پاسخ

            نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

            ساخت اپلیکیشن های موبایل

            • ساخت اپلیکیشن فروشگاهی
            • ساخت اپلیکشن ابزاری و خدماتی
            • ساخت اپلیکیشن آموزشی
            • و هزاران موضوع دیگر

             
            کلیک کنید

            آخرین دیدگاه ها

            • 9 اسفند 1401

              مهری اصغری نظر در پیاده سازی اولین پروژه با فلاتر Flutter

            • 26 آبان 1401

              سجاد نظر در پروژه مدیریت سیستم مدرسه با سی شارپ و sql server

            • 7 خرداد 1401

              داودی نظر در آموزش استفاده از ckeditor همراه با آپلود عکس در لاراول 6

            تجاری اپ در شبکه های اجتماعی

            لوگوی تایید پرداخت آنلاین

            2015-2022 © تمامي حقوق مادي و معنوي اين وب سايت نزد تجاری اپ محفوظ بوده و هر گونه کپي برداري از مطالب پيگرد قانوني به همراه دارد! | طراح سایت : ProgRun
            سفارش پروژه
                      هیچ نتیجه ای یافت نشدمشاهده همه نتایج