Eloquent: گرفتن آخرین row در یک relation

فرض کنید می‌خواهید همه سطرهای یک جدول را به اضافه تنها یک سطر از یک رابطه از آن جدول با جدولی دیگر را بگیرید، دقت کنید نه همه سطرهای مرتبط، تنها یکی و آنهم آخرین سطر را. خیلی ساده‌ست.

یک مثال واقعی بزنیم. ما یک مدل Authors و Books با یک رابطه 1-n داریم، بنابراین هر author می‌تواند یک یا تعداد بیشتری کتاب داشته باشد. ما می‌خواهیم همه authorها به همراه آخرین کتاب آنها را نمایش دهیم.

قدم اول: فایل  app/Author.php - متود جدید:


public function latestBook()
{
    return $this->hasOne('\App\Book')->latest();
}

متود  latest() همه سطرها را با  created_at descمرتب می‌گند و اولین آنها را می‌گیرد.

قدم دوم: Controller:


$authors = Author::with('latestBook')->get();
foreach ($authors as $author) {
    echo $author->name . ': ' . $author->latestBook->title;
}

همچنین شما می‌توانید از  oldest() به جای  latest() استفاده نمایید، در این صورت اولین رکورد با قانون زیر را برخواهد گردوند:order by created_at asc.

کامنت ها (0)

ارسال نظر