نوشتن جستجوی پیشرفته در لاراول 5

جستجوی پیشرفته آپشنیه که توی اکثر سایتها مخصوصا سایتهای فروشگاهی و یا سایتهایی که مطالبشون دسته بندی دارن وجود داره و به کاربرها این امکان رو میده که بصورت دقیقتر یک مطلب یا محصول خاص رو پیدا کنند. از اونجایی که این سوال توی گروههای برنامه نویسی زیاد پرسیده میشه تصمیم گرفتم آموزشش که خیلی خیلی هم سادست رو بنویسم.

فرض کنید شما یه جدول محصولات با نام products دارید و هر محصول چندتا ویژگی به این شرح داره:

نام محصول = name

رنگ = color

سایز = small-big-medium

وزن = weight

حالا برای نوشتن یه جستجوی ساده با توجه به ورودی کاربر که نام محصول در نظر گرفته شده کوئری ما به این شکل خواهد بود:

$query= Product::where('name', 'like', '%' . $name . '%');

کوئری بالا هر محصولی که کلمه کلیدی سرچ شده رو داشته باشه برمیگردونه. برای پیشرفته تر کردن عملیات جستجو کدهای زیر رو هم اضافه میکنیم.

if(!empty($color)) $query->where('product.color', $color);
if(!empty($size)) $query->where('product.size', $size);
if(!empty($weight)) $query->where('product.weight', $color);

به همین راحتی! توی شرطهای بالا چک میشه که اگه مقادیر ارسالی از طریق فرم جتسجو، خالی نبود به ازای هر فیلد جستجوی دقیقتری انجام بشه. کدهای بالا در حالتی که همه موارد توسط کاربر با مقادیر فرضی ارسال بشه معادل کد SQL زیر خواهد بود.

SELECT * FROM 'products' WHERE name LIKE '%laptop%' && color='black' && size='small' && weight='light'

نکته ها:

  • هر $query->where(); معادل یک عملگر AND در نظر گرفته می شود.
  • برای نوشتن عملگر OR از orWhere استفاده کنید مثل:
$query->orWhere('product.color', $color);