کوئری های منعطف همراه با if در فریم ورک لاراول
افزودن if به کوئری در لاراول
لاراول این قابلیت را دارد که کوئری خود را به چند قسمت تبدیل کنید و در آخر تمام قسمت های تقسیم شده را واحد کرده و از دیتابیس واکشی اطلاعات را انجام دهید افزودن if به کوئری در لاراول یک ویژگی جالب می باشد که مثال خود را با تعیین فیلد های جدول و کوئری بر روی جدول مورد نظر پیش خواهیم برد.
فیلدهای جدول برای اعمال if در لاراول
بر فرض یک جدول به نام product داریم که محصولات ما را نگه داری می کند با فیلدهای ذیل که قرار است شرط if بر روی کوئری آن در لاراول اجرا شود:
- id (شناسه محصول)
- title (نام محصول)
- entity (موجودی کمترین مقدار 0)
- color (رنگ محصول : قرمز، آبی ، زرد ، بنفش)
خوب مثال خود را با یک کوئری ساده، واکشی محصول با شناسه شروع می کنیم که شناسه برای متد مورد نظر ما ارسال می شود
public function show($id)
{
$query=Product::findOrFail($id);
return $query;
}
کوئری پیچیده در لاراول
برای یک کوئری پیچیده در لاراول نیاز است که ما از ورودی های متد خود اطلاعی نداشته باشیم و در صورت مقدار داشتن یک ورودی در کوئری اعمال شود مثلا ما می خواهیم تمام محصولات با رنگ قرمز و موجودی برابر تعداد مشخص شده توسط کاربر باشد را از دیتابیس خود واکشی کنیم توجه کنید که قرار است این دو مقدار را کلاینت مقدار دهی کند:
public function show(Request $request)
{
$query=Product::query();
if(isset($request->color))
{
$query->where('color',$request->color);
}
if(isset($request->entity))
{
$query->where('entity',$request->entity);
}
$query=$query->get();
return $query;
}
این مثال برای کوئری هایی که ورودی خود را به صورت ajax از کاربر برای جستجو در محصولات وارد می کنند بسیار کاربردی می باشد و جدا کردن کوئری به قسمت های کوچکتر به شما کمک می کند تا داده های مقداردهی شده در شروط شرکت کنند و نتیجه براساس آنها در واکشی از دیتابیس در فریم ورک لاراول بازگشت داده شود اگر بخواهیم کوئری بالا را برای تمام ستون های جدول کامل کنیم به صورت ذیل خواهد بود:
public function show(Request $request)
{
$query=Product::query();
if(isset($request->color))
{
$query->where('color',$request->color);
}
if(isset($request->entity))
{
$query->where('entity',$request->entity);
}
if(isset($request->title))
{
$query->where('title','Like','%'. $request->title .'%')
}
$query=$query->get();
return $query;
}