استفاده از متد when در eloquent لاراول چگونه است؟

استفاده از متد when   جهت ایجاد پرس و جوها در لاراول، یک روش اصولی در اختیار ما قرار می‌دهد که ما در این مقاله قصد داریم استفاده از آن را به شما آموزش دهیم. با لیداوب همراه باشید.


در لاراول روش‌های زیادی برای ایجاد پرس و جوها توسط eloquent وجود دارد که پرکاربردترین آن استفاده از if-else است. این روش برای شرط‌های زیاد غیر منطقی به نظر می‌رسد و کدهای برنامه شما را شلوغ و ناخوانا می‌کند. در ادامه مقاله، استفاده از متدwhen را به جای استفاده از روش if-else که یک راه اصولی برای ایجاد پرس و جوها در لاراول ارائه می‌دهد را مورد بررسی قرار می‌دهیم. 

متد when در eloquent

تا مدت‌ها اکثر برنامه نویسان، برای ایجاد پرس و جوها از پرسش و پاسخ‌های مشروط استفاده می‌کردند، مانند مثال زیر:

if (request('filter_by') == 'likes') {
    $query->where('likes', '>', request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
    $query->orderBy('created_at', request('ordering_rule', 'desc'));
}

اما باید بگویم که راهی بسیار ساده وجود دارد که خواناتر و ساده‌تر است و آن استفاده از  متد  when() است:

$query = Author::query();

$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});

$authors = $query->get();
 

استفاده از این روش اصولی‌تر به نظر می‌رسد. نظر شما چیست؟

بیشتر بخوانید:

شروع کار با Eloquent ها در لاراول

راهکار مناسب برای فیلتر پرس و جوهای رابطه ای با استفاده از Eloquent

صبر کنید، هنوز نکات بیشتری در این زمینه وجود دارد

در مثال زیر، می‌خواهیم کاربرانی را استخراج کنیم که role (دسترسی) آن‌ها با دسترسی‌های که به پرس و جوی ما پاس داده می‌شود، مطابقت دارد.
پس پرس و جو به این صورت است که اگر پارامتری ارسال نشود، همه کاربران را مشاهده خواهید کرد، اما اگر پارامتری ارسال شود، خروجی بر اساس پارامترها ایجاد می‌شود. فرض کنید،  role=>1 سطح دسترسی مدیران سایت است، اگر در پارمتر role مقدار "1" فرستاده شود، خروجی ما فقط لیست مدیران سایت خواهد بود.

$query = User::query();

// From Laravel 5.4 you can pass the same condition value as a parameter
$query->when(request('role', false), function ($q, $role) { 
    return $q->where('role_id', $role);
});

$authors = $query->get();
 
 
این روش فقط روشی بهتر جهت نوشتن  if-else نیست، بلکه می‌تواند یک روش عالی برای سازماندهی پرس و جوهای مشروط باشد.
 

 بیشتر بخوانید:

آموزش پایه لاراول ۵,۵

آموزش CSS

آموزش HTML مقدماتی

 در این مقاله، استفاده از متد when() در لاراول را جهت سازماندهی پرس و جوهای مشروط مورد بررسی قرار دادیم. برای دانستن نکات بیشتر درباره این فریم ورک محبوب مقالات ما در لیداوب را از دست ندهید.