آموزش ارتباط چند به چند در لاراول

آموزش ایجاد ارتباط چند به چند در لاراول

آموزش ایجاد ارتباط چند به چند در لاراول

همانطور که می دانید یکی از مباحث بسیار کاربردی در تمامی بانک های اطلاعاتی مسئله مربوط به ارتباطات بین جداول است و وقتی شما یک پروژه ای را استارت می زنید مطمئنا در آن پروژه از ارتباطات بین جداول استفاده خواهید کرد!

برنامه نویسانی که از فریم ورک لاراول استفاده می کنند هم از این قاعده مستثنا نیستند و در پروژه های خود باید از آن استفاده کنند.

به صورت کلی سه نوع ارتباط بین جدول ها وجود دارد.

  1. ارتباط یک به یک
  2. ارتباط یک به چند
  3. ارتباط چند به چند

در این پست مبحث ما بر روی مورد سوم یعنی ارتباط چند به چند است که سخت ترین و پیچیده ترین نوع ارتباطات را می توان با آن پیاده سازی کرد و به این خاطر دارای پیچیده گی های خاص خود نیز هست!

به تصویر زیر توجه کنید

ارتباط چند به چند در لاراول

در تصویر بالا ارتباطات چند به چند و نحوه ی اتصال جدول ها نمایش داده شده است.

اگر بخواهیم در دنیای برنامه نویسی مثالی را از کاربرد ارتباط چند به چند بیاوریم بدون شک بهترین مثال ارتباط بین پست ها و برچسب ها خواهد بود که در این ارتباط  چندین تگ  می توانند به چندین پست اشاره کنند تصور نمایید که شما در یک نوشته تگ های لاراول،آموزش لاراول،آموزش ایجاد ارتباط چند به چند در لاراول،ارتباط بین جدول ها و غیره را ایجاد کرده اید پس یک نوشته چندین تگ دارد ولی باید این مسئله را هم در نظر بگیرید که یک تگ هم می تواند به چندین پست اشاره داشته باشد یعنی ارتباط چند به چند را یک ارتباط یک به چند دو طرفه در نظر بگیرید که در ارتباط یک به چند فقط یک پست می توانست چندین تگ داشته باشد ولی در چند به چند ، یک تگ هم می تواند به چندین پست اشاره داشته باشد!

در این مثال قصد نداریم که از مسئله تگ ها برای جدول سازی و تکمیل فرآیند آموزش استفاده کنیم چون مطمئنا با یک جستجوی ساده می توانید آموزش های مربوط به این مثال را پیدا کنید و برای ایجاد تفاوت می خواهیم مسئله فروشگاه و محصولات را مطرح کنیم که در دنیای واقعی هم قادر به لمس آن باشیم!

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

در این مثال ما یک جدول به اسم shops داریم که دارای فیلد های زیر است

جدول shops
id

name

و جدولی دیگر به نام products داریم که دارای فیلد های زیر است

جدولproducts
id

name

 نکته بارز و متفاوت ارتباط چند به چند و سایر ارتباطات جداول در وجود جدول واسط می باشد و حتما باید برای ارتباطات چند به چند یک جدول واسط ایجاد کنید تا بتواند رابطه جدول ها را با هم حفظ کند.

قوانین نام گذاری جدول واسط هم مانند سایر جدول هاست با این تفاوت که حتما جدول واسط را با ترکیب نام های دو جدول به صورت مفرد ایجاد می کنیم یعنی جدول واسط مثال ما به نام product_shop می باشد که products و shops را به صورت singular نوشتیم!

توجه کنید که نام گذاری جدول واسط حتما باید از ترتیب حروف الفبای انگلیسی تبعیت کند!یعنی حروف الفبا مشخص می کند که نام کدام جدول ابتداعا نوشته شده و بعد از underscore یا همان ـ نام کدام جدول نوشته شود.

در جداول واسط یا همان pivot به صورت معمول تنها دو فیلد قرار می گیرند البته این فقط یک استاندار بوده و به اصطلاح مستحب است:)

نام فیلد ها حتما باید از ترکیب نام جدول ها به صورت مفرد تشکیل شده باشد پس در جدول واسط ما دو فیلد داریم که به صورت زیر می باشند

  جدول product_shop
product_id
shop_id

توجه فرمایید که حتما باید هر دو فیلد از نوع primary تعریف شده باشد یعنی باید به صورت کلید اصلی باشند.

ترکیب جدول ها کاملا مشخص است بعد از ایجاد جدول ها می توانیم به مراحل ایجاد مدل های بپردازیم.

app/Shop.php

 

app/Product.php

برای جدول واسط در بسیاری از موارد نیاز به ایجاد جدول واسط نیست!

توجه داشته باشید که در این جدول ها کلید اصلی جدول های ما فیلد id می باشد و قوانین نام گذاری گفته شده را رعایت کرده و طبق آنها کلید های جدول واسط و نام گذاری آن انجام شده است  در صورتی که کلید اصلی شما فیلدی به غیر از id می باشد باید نام آن را حتما در هنگام تعریف تایع ها به صورت آرگومان ارسال کنید!یعنی در صورتی که از استانداردهای نام گذاری گفته شده استفاده نکنید حتما باید فیلدها را ارسال کنید در غیر این صورت به مشکل بر خواهید خورد!

برای مثال تصور کنید که شما مفرد سازی فیلد ها را انجام نداده اید و فیلد ها را به صورت products_id و shops_id تعریف کرده اید و نام جدول واسط را هم products_shops نام گذاری کرده اید  باید به صورت زیر عمل کنید

الان کارهای مربوط به رابطه سازی به اتمام رسیده است ولی چگونه باید اطلاعات را وارد جدول کنیم؟

چندین روش برای این کار وجود دارد ! در روش ساده و مدل برنامه نویسان php به صورت تک به تک در چند مرحله اطلاعات وارد می شود که متاسفانه متداولترین روش است و اصلا ذات فریم ورک را زیر سئوال برده است!

یکی از روش های معقول و کاربردی استفاده از روش attach کردن اطلاعات است!

در این مثال ما می خواهیم یک محصول دیگر را به فروشگاه موجود اضافه کنیم

در این مثال فقط ما سعی کردیم که یک سط جدید را ایجاد کنیم!

برای حذف یک سطر از جدول محصول هم می توانیم  کد زیر را به انتهای مثال قبل اضافه کنیم!

توجه داشته باشید در صورتی که هیچ آیدی ای به تابع بالا ندهیم کل محصولات مغازه مورد نظر ما پاک خواهند شد!

برای آپدیت کردن هم می توانیم از کد زیر استفاده کنیم

مثالی دیگر برای اضافه کردن محصول در جدولی که اطلاعات زیادی برای ارسال به آن نیاز است

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

دانلود آموزش ارتباط بین جدول ها laracast

ادامه دارد…