روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ روح الله طالبیان
رابطه ی یک به یک در مدل ها
جامعه پی اچ پی ایجاد شده در ۲۴ آذر ۱۴۰۰

با سلام و خداقوت

در رابطه‌های یک به چند به خوبی مشخص است که در کدام طرف مدل belongsTo بزاریم و در کدام مدل hasMany ولی در رابطه با رابطه ی یک به یک شما چگونه تشخیص دادید در قسمت مدل پرداخت باید belongsTo بزاریم و در قسمت مدل سفارش باید hasOne آیا اگر برعکس بزاریم مشکلی پیش نمیاد؟ و در رابطه ی چند به چند از چه چیزی باید استفاده کنیم هر دو hasMany به hasMany خواهد بود؟

سلام و احترام

شما فرض کنید یه جدول کاربران دارید (users) و یه جدول phones دارید که هر کاربر یه شماره داره و داخل این جدول ذخیره میشه، حالا اگه من بخواهیم یه relation بین اینا تعریف کنم میگم که یه کاربر میتونه یه شماره موبایل داشته باشه پس سمت مدل User من میزارم HasOne (چون کاربر میتونه یه دونه شماره موبایل داشته باشه)

   public function phone()
    {
        return $this->hasOne(Phone::class);
    }


و از سمت مدل Phone هر شماره موبایلی مطعلق به یک کاربر هستش که سمت مدل Phone هم میزارم BelongsTo و میگم که این شما موبایل مطعلقه به یک کاربر

    public function user()
    {
        return $this->belongsTo(User::class);
    }


برای رابطه چند به چند شما فرض کنید یه سری محصول دارید که هر کدوم از اینا داخل یه سری دسته بندی هستن

ساختار جداولمون به این شکل میشه که یه جدول داریم به اسم products که محصولاتمون داخلش میشینه و یه جدول دیگه داریم به اسم categories که دسته بندی هامون داخل میشینه. حالا اگه میخوایم یک رابطه چند به چند داشته باشیم باید یه جدول دیگه بیاریم وسط مصلا به اسم category_product باید یه جدول دیگه داشته باشیم که بگیم این محصول مربوط میشه به یه دسته بندی‌های مختلف

ما داخل مدل محصولاتمون (Product) میایم یه relation تعیریف میکنیم که بگیم محصولمون مطعلق میشه به دسته بندی

   public function categories()
    {
        return $this->belongsToMany(Category::class);
    }


از سمت مدل Category هم یه relation باید درست کنیم که بگیم این دسته بندی‌ها هم مطعلق میشه به محصولات

 public function products()
    {
        return $this->belongsToMany(Product::class);
    }

اگه جاییش گنگ بود مطرح کنید تا بیشتر توضیح بدم

بهترین پاسخ
امیر صالحی ۲۵ آذر ۱۴۰۰، ۰۶:۱۵