توابع has و doesnthave در Eloquent

من هر از گاهی راجع به لاراول نکات کوتاهی می‌نویسم که یکی از مباحث مهم در لاراول، Eloquentها هستند که خیلی داکیومنت های ضعیف یا نامتناسب با توانمندی آن نوشته شده است. یکی از آنها، فیلتر کردن والدها (parents) است با شرط اینکه فرزند داشته باشند یا خیر. با یک مثال توضیح می‌دهم.

تصور کنید Authors و Books را با یک رابطه 1-n داشته باشیم به طوری که هر Author بتواند یک یا چند Book داشته باشد. به کد در فایل app\Author.phpنگاه کنید:


public function books()
{
    return $this->hasMany(\App\Book::class, 'author_id');
}

حالا اگر بخواهیم فقط Authorهایی را نمایش دهیم که حداقل یک کتاب داشته باشند، چه کنیم؟ به سادگی و با استفاده از متودhas():


$authors = Author::has('books')->get();

هم چنین، متود مخالف آن، برای آنکه Authorهایی را نمایش دهیم که هیچ کتابی ندارند، از متودdoesnthave()استفاده می‌کنیم:


$authors = Author::doesnthave('books')->get();

در یک نگاه، نه تنها خیلی ساده‌ست، بلکه خیلی خوانا و قابل فهم هم هست، حتی برای کسانی که دولوپر لاراول نباشند.

کامنت ها (0)

ارسال نظر