TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #315 164
فصل چهار - مدل‌ها و Eloquent ORM

بخش دوم - مدل ها - قسمت دوازدهم (آشنایی با روابط)


روابط دیتابیس در لاراول به نحوه اتصال جداول به یکدیگر اشاره دارد. این روابط به شما اجازه می‌دهند که جداول مرتبط را به روشی ساده و مستقیم بازیابی و مدیریت کنید. معمولاً روابط در لاراول از طریق Eloquent ORM مدیریت می‌شوند، که این روش دسترسی و کار با داده‌های مرتبط را بسیار آسان‌تر می‌کند.

انواع روابط:

1- رابطه One-to-One (یک به یک):
در این نوع رابطه، هر رکورد از یک جدول فقط به یک رکورد از جدول دیگر مرتبط است.

مثال:
هر کاربر فقط یک پروفایل دارد.

2- رابطه One-to-Many (یک به چند):
در این نوع رابطه، هر رکورد از یک جدول می‌تواند به چندین رکورد از جدول دیگر مرتبط باشد.

مثال:
هر پست می‌تواند چندین نظر داشته باشد.

3- رابطه Many-to-One (چند به یک):
این رابطه در واقع برعکس One-to-Many است. چند رکورد از جدول دوم به یک رکورد در جدول اول مرتبط است.

مثال:
چند نظر به یک پست تعلق دارد.

4- رابطه Many-to-Many (چند به چند):
در این نوع رابطه، هر رکورد از یک جدول می‌تواند به چندین رکورد از جدول دیگر مرتبط باشد و بالعکس. این نوع رابطه از طریق یک جدول واسط (pivot table) مدیریت می‌شود.

مثال:
هر کاربر می‌تواند چندین نقش داشته باشد و هر نقش به چندین کاربر اختصاص داده شده باشد.

5- رابطه Has-Many-Through (چندین رکورد از طریق یک رابطه واسط):
این نوع رابطه به شما امکان می‌دهد که رکوردهای یک جدول را از طریق رابطه‌ای با یک جدول واسط بازیابی کنید.

مثال:
هر شهر می‌تواند چندین دکتر از طریق بیمارستان‌ها داشته باشد.

6- رابطه Polymorphic Relationships (روابط چندشکلی):
این نوع رابطه به شما امکان می‌دهد که یک مدل به چندین مدل دیگر مرتبط باشد.

مثال:
یک عکس می‌تواند به یک پست یا به یک کاربر مربوط باشد.

مثال ساده از رابطه یک به یک (One-to-One)

فرض کنید دو جدول به نام‌های users و profiles دارید. هر کاربر فقط یک پروفایل دارد و هر پروفایل به یک کاربر تعلق دارد. با استفاده از رابطه یک به یک در لاراول، می‌توانید به سادگی این رابطه را مدیریت و بازیابی کنید.

مدل User:
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}

متد profile نشان می دهد که هر کاربر یک پروفایل دارد.

مدل Profile:
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}

متد user نشان می دهد که هر پروفایل متعلق به یک کاربر است.

نکته: جدول profiles دارای ستونی به نام user_id است که کلید خارجی (foreign key) به جدول users می‌باشد.

استفاده از رابطه در کد:

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

بدون رابطه:
برای بازیابی پروفایل کاربر به صورت دستی باید کوئری پیچیده‌تری بنویسید:
$user = User::find(1);
$profile = Profile::where('user_id', $user->id)->first();


با رابطه یک به یک:
اما با استفاده از رابطه، کار شما بسیار ساده‌تر و خواناتر می‌شود:
$user = User::find(1);
$profile = $user->profile;

پراپرتی profile در کد بالا درواقع همان متد profile است که در مدل User تعریف کرده ایم.

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

▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.
  • 👍 2
  • ❤ 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →