روابط یک به یک (One to One) لاراول
در لاراول، رابطه یک به یک (One-to-One) به این معنی است که یک رکورد از یک مدل فقط با یک رکورد از مدل دیگر ارتباط دارد. به عبارت دیگر، هر رکورد در مدل اول تنها با یک رکورد در مدل دوم مرتبط است و بالعکس. این نوع رابطه برای مواقعی مناسب است که بخواهید اطلاعات مرتبط با یک رکورد را در یک جدول جداگانه ذخیره کنید، اما هر رکورد تنها یک ارتباط با رکورد دیگر داشته باشد.
مثال:
فرض کنید در یک اپلیکیشن کاربران (Users) و پروفایلها (Profiles) داریم. هر کاربر تنها یک پروفایل دارد و هر پروفایل نیز تنها به یک کاربر تعلق دارد. این یک نمونه از رابطه یک به یک است.
🛠️ نحوه پیادهسازی روابط One to One در لاراول
1. تعریف رابطه در مدلها
1.1 مدل User
در مدل User، برای تعریف رابطه یک به یک با مدل Profile از متد hasOne استفاده میکنیم.
1.2 مدل Profile
در مدل Profile، هر پروفایل متعلق به یک کاربر است، بنابراین از متد belongsTo استفاده میکنیم.
2. ایجاد جدولها و مایگریشنها
برای پیادهسازی این رابطه، به دو جدول نیاز داریم: یکی برای ذخیره اطلاعات کاربران (users) و دیگری برای ذخیره پروفایلها (profiles).
2.1 مایگریشنی برای جدول users
2.2 مایگریشنی برای جدول profiles
در جدول profiles باید یک فیلد user_id وجود داشته باشد که ارتباط هر پروفایل با کاربر مربوطه را برقرار میکند.
در اینجا از متد foreignId برای ایجاد فیلد user_id استفاده میکنیم و با constrained() این فیلد را به جدول users متصل میکنیم. همچنین با onDelete('cascade') میگوییم که اگر یک کاربر حذف شود، پروفایل او نیز حذف شود.
3. استفاده از رابطه One to One
3.1 گرفتن پروفایل برای یک کاربر
برای دسترسی به پروفایل یک کاربر، از رابطه تعریفشده در مدل User استفاده میکنیم. این کار به شکل زیر انجام میشود:
3.2 ایجاد پروفایل برای یک کاربر
برای ایجاد یک پروفایل جدید برای یک کاربر، ابتدا کاربر مورد نظر را پیدا کرده و سپس پروفایل را ایجاد میکنیم:
در اینجا از متد create() برای ایجاد پروفایل جدید استفاده میکنیم. دقت کنید که برای استفاده از create(), فیلدهای مدل Profile باید در fillable قرار داده شوند.
3.3 بهروزرسانی پروفایل یک کاربر
برای بهروزرسانی پروفایل یک کاربر، میتوانید به راحتی به پروفایل دسترسی پیدا کرده و آن را بهروزرسانی کنید:
3.4 حذف پروفایل یک کاربر
برای حذف پروفایل یک کاربر، میتوانید از متد delete() استفاده کنید:
3.5 گرفتن کاربر مرتبط با یک پروفایل
برای دسترسی به کاربر مرتبط با یک پروفایل، از رابطه belongsTo استفاده میکنیم که در مدل Profile تعریف کردهایم:
✅ مزایای استفاده از روابط One to One
-
سادگی در مدلسازی: رابطه یک به یک برای مدلهایی که هر رکورد در یک مدل با یک رکورد در مدل دیگر مرتبط است، بسیار مفید است و در بسیاری از سناریوها مانند ارتباط کاربر و پروفایل کاربرد دارد.
-
پشتیبانی از دادههای جداگانه: میتوانید اطلاعات اضافی را در مدلهای جداگانه ذخیره کنید بدون اینکه بخواهید همه اطلاعات را در یک جدول واحد نگه دارید.
-
سهولت در پیادهسازی: لاراول برای تعریف روابط یک به یک ابزارهای بسیار سادهای دارد که باعث میشود پیادهسازی آن در پروژهها سریع و آسان باشد.
-
مقیاسپذیری: شما میتوانید به راحتی دادههای اضافی را در جدولهای جداگانه ذخیره کرده و از رابطه یک به یک برای ارتباط میان آنها استفاده کنید.
🛠️ جمعبندی
رابطه یک به یک (One-to-One) در لاراول به شما این امکان را میدهد که یک رکورد در یک مدل را با یک رکورد در مدل دیگر پیوند دهید. این نوع رابطه در سناریوهایی مفید است که نیاز دارید اطلاعات مرتبط با یک رکورد را در یک جدول جداگانه ذخیره کنید. با استفاده از متدهای hasOne و belongsTo میتوانید این نوع روابط را به راحتی تعریف کرده و دادهها را مدیریت کنید. این ویژگی در لاراول به شما کمک میکند تا ساختار دادههای خود را بهصورت مرتب و کارا مدیریت کنید.