مجددا باید بگم که من همه کارام رو توی لاراول ۵٫۰٫۰ انجام میدم 🙂

امروز میخوام در مورد یک چیز خیلی مهم توی لاراول صحبت کنم… نحوه ی ارتباط برقرار کردن چند به چند بین دو جدول در لاراول ۵٫

یک مثال کاملا واقعی در مورد رابطه های چند به چند در لاراول

توی داکیومنت رسمی لاراول مثالی که واسه روابط چند به چند اومده ، رابطه ی role و user هست که یک یوزر میتونه متعلق به چند نقش باشه و برعکس ، یعنی یک نقش مثل ادمین هم میتونه متعلق به چند کاربر باشه . من یه مثال ملموس تر براتون میزنم : رابطه ی محصولات و فروشگاهها رو در نظر بگیرید. شما نیاز دارید که بدونید مثلا گوشی فلان رو چه فروشگاههایی دارن و همچنین نیاز دارید بدونید که فلان فروشگاه چه گوشیهایی داره…

جدول های مورد نظر میتونن به شکل زیر باشن :

shops
– id
– name

products
– id
– name

product_shop
– product_id
– shop_id

برای اینکه بین ذو جدول رابطه چند به چند بوجود بیاد ، بهترین راه استفاده از یک جدول میانی هست که ارتباط بین دو جدول رو تشکیل بده. این جدول حداقل باید دو فیلد داشته باشه ، که آیدی دو ریکورد از دو جدول رو به هم نسبت بده…

برای اینکه این جدول رو درست کنیم میتونیم از مایگریشن های خود لاراول استفاده کنیم… مثلا در یک وبلاگ ، پست ها و تگ ها دارای رابطه چند به چند هستند که جدول post_tag رو میتونیم به صورت زیر بسازیم :

 

جدول  post_tag  رو اصطلاحا بهش میگن pivot table… نام جدول pivot باید بصورت First_Second باشه که First نام جدول اول و Second نام جدول دوم هست… ترتیب هم باید بر اساس حروف الفبا باشه…  بصورت پیشفرض جدول pivot دوتا فیلد داره : post_id و tag_id که میتونید فیلد های بیشتری هم بهش اضافه کنید . مثلا برای اینکه شما یک پلن رو به یک کاربر اختصاص بدید میتونید تاریخ پایان پلن رو هم توی جدول میانی یا همون pivot ذخیره کنید. برای بدست آوردن مقدار فیلد های دیگه هم میتونید از این روش استفاده کنید :

 


حمید

حمید حق دوست هستم، توسعه دهنده وب و علاقمند به خیلی چیزا که آمارش دست خودمم نیست! لاراول رو دوست دارم ولی دلیل نمیشه که از علاقم به جاوا اسکریپت کم کنه و سعی میکنم جفتشونو داشته باشم :)

7 دیدگاه

هدا · شهریور ۲, ۱۳۹۶ در ۱۰:۳۲ ب.ظ

سلام وقت بخیر خیلی ممنون از توضیحات خوبتون من میخوام یک جدول محصولات داشته باشم و یک جدول خصوصیات که فقط عنوان خصوصیت داخل آن باشد و مقدار خصوصیت داخل جدول میانی قرار گیرد ، ولی نمیدونم چه طوری این value را ازجدول میانی بخونم میتونید راهنماییم کنید ممنون میشم

    حمید · شهریور ۴, ۱۳۹۶ در ۹:۰۹ ق.ظ

    توی مدل میتونید مقادیر جدول میانی رو هم برگردونید

    با withPivot(‘…’)

ندا · آذر ۹, ۱۳۹۶ در ۵:۳۹ ق.ظ

با سلام
من دوتا جدول با رابطه چند به چند دارم، چطوری میتونم آیدی یه رکورد رو تو جدول واسط بکشم بیرون؟
ممنونم.

محمد · شهریور ۱۲, ۱۳۹۷ در ۱۱:۲۱ ب.ظ

با سلام
و ممنون بابت توضیحات کاملتون
سئوالی داشتم در همین مورد.
من می خوام ویژگی های محصولاتم رو داینامیک کنم،به همین خاطر بین جدول دسته بندی و جدول ویژگی یک جدول میانی ایجاد کردم و به درستی داره کار میکنه، منتها الان نمی دونم که برای زیر ویژگی ها چه کاری باید انجام بدم .الان تا اینجا پیش رفتم که مثلا” برای دسته ی گوشی موبایل ویژگی مشخصات فیزیکی رو ثبت کردم، حالا برای مشخصات فیزیکی می خوام ابعاد رو ثبت کنم، این رو میشه بفرمایید چطوری باید انجامش بدم.البته به همین صورت فعلی هم می تونم زیر ویژگی ایجاد کنم، اما می خوام در بخشی جدا اینکار انجام بشه که لیست ویژگی ها و زیر ویژگی ها بصورت مجزا نمایش داده بشن.
با تشکر
با تشکر

    حمید · شهریور ۱۳, ۱۳۹۷ در ۱:۲۶ ب.ظ

    خب میتونید یه جدول دیگه درست کنید واسه زیر ویژگی ها و یه جدول دیگه برای مقادیره این زیر ویژگی ها (معمولا این کار رو میکنن)

      محمد · شهریور ۱۳, ۱۳۹۷ در ۵:۲۶ ب.ظ

      ممنون از پاسختون ، به همین روش که فرمودین عمل کردم،
      یه مورد دیگه ای هم در همین خصوص هست و اونم اینه که من یک global function ایجاد کردم و یک متد سراسری برای دسته بندی ها نوشتم، و از طریق همون در یک جدول زیر دسته بندی و زیر دسته رو نشون میدم، منتها من می خوام توی یک ستون دسته بندی اصلی نمایش داده بشه و در ستون بعدی زیر دسته ها،در ستون زیر دسته ها مشکلی نیست ولی باز در ستون اصلی هر کار می کنم زیر دسته ها هم نمایش داده میشه.چطوری باید زیر دسته ها رو از ستون دسته بندی اصلی جدا کنم؟
      نمونه کد:
      http://uupload.ir/view/mcb8_sample_code.txt/
      تصویر پنل:
      http://uupload.ir/files/10jn_screenshot_2018-09-04_21.52.43.png

      با تشکر

دیدگاهتان را بنویسید

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