فصل دوم: پایگاه داده با Eloquent

روابط بین مدل‌ها

تعریف رابطه‌های Eloquent

در پایگاه داده‌های رابطه‌ای، جداول معمولاً با یکدیگر ارتباط دارند؛ مثلاً هر کاربر می‌تواند چند مقاله بنویسد و هر مقاله می‌تواند چند برچسب داشته باشد. Eloquent این روابط را با متدهای ساده‌ای در داخل مدل تعریف می‌کند.

رابطه‌ی یک‌به‌چند (hasMany / belongsTo)، رایج‌ترین نوع رابطه است:

class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

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

پس از تعریف این رابطه، دسترسی به داده‌های مرتبط بسیار ساده می‌شود:

$user = User::find(1);
foreach ($user->posts as $post) {
    echo $post->title;
}

$post = Post::find(1);
echo $post->user->name;

برای رابطه‌ی چندبه‌چند (مثل مقاله و برچسب) از belongsToMany استفاده می‌شود که نیاز به یک جدول واسط دارد:

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class);
    }
}

نکته‌ی مهم برای بهبود کارایی، استفاده از Eager Loading با متد with() است تا از مشکل معروف N+1 Query جلوگیری شود؛ یعنی به‌جای اجرای یک کوئری جداگانه برای هر رکورد، تمام داده‌های مرتبط در یک یا دو کوئری بارگذاری می‌شوند، برای مثال:

$posts = Post::with('user')->get();

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.