PDA

View Full Version : انجام عملیات های فیلترینگ و جست و جو



saeidmamadi
پنج شنبه 19 دی 1398, 01:12 صبح
سلام و خسته نباشید من در لاراول تازه کار هستم ولی سابقه چندسال php کار کردن رو دارم .

قبلاْ در پروژه های php و زمانی که قصد نمایش اطلاعات رو در Table داشتم از پلاگین دیتا تیبل در پروژه هام استفاده می کردم و این پلاگین در قسمت server side قابلیت های خوبی داره که یکی از مزایاش اینه که کلیه عملیات های مربوط به filter و جست و جو رو خودش انجام میده و نیاز نیست شما کار خاصی انجام بدی . مثلا فیلتر روی قیمت و بعدش روی سال ساخت و ... خلاصه کلام اینکه الان به مقتضیات کارم قصد استفاده از اون پلاگین رو ندارم و با پروژه ای روبرو هستم که محصولات باید شبیه به دیجی کالا نمایش داده بشوند و بتوان همزمان چندین فیلتر رو روشون اعمال کرد (قیمت . برند . سال ساخت و ...) که طبیعتاْ این قضیه در بحث table جا نمیگیره حداقل در لایه نمایش با جدول سرو کار ندارم . بنا بر این ۲ تا سوال دارم

۱-آیا پلاگینی سراغ دارید که بشه عملیات های جست و جو و فیلتر رو خودش انجام بده و از نظر ظاهری هم چیزی مثل دیجی کالا ، دیوار باشه ؟

۲- فارغ از بحث نمایش آیا لاراول قابلیتی داره که بتونه چندفیلتر همزمان رو اعمال کنه یا باید دستی نوشته بشه ؟

plague
پنج شنبه 19 دی 1398, 22:08 عصر
2 -فیلتر انجام دادن سخت نیست مثلا فرض کن یه تیبل داری به اسم users با این فیلد ها


id , name , mobile , email


یه همیچن کدی میشه



function user(Request $request){

$query = User::orderBy('id' , 'desc');
if($request->input('name'))
$query->where('name' , $request->input('name'));
if($request->input('mobile'))
$query->where('mobile' , $request->input('mobile'));
$users = $query->paginate(10);
}

یا اگه بخای یجا شرط ها رو بفرستی


function user(Request $request){

$cond = [] ;
if($request->input('name'))
$cond[] = ['name' , $request->input('name') ];
if($request->input('mobile'))
$cond[] = ['mobile' , $request->input('mobile') ];

$users = User::where($cond)->orderBy('id' , 'desc')->paginate(10);
}


اگرم بخای روی یک تیبل دیگه که با کلید خارجی به تیبل users وصله فیلتر انجانم بدی اول relation رو تعریف میکنی تو مدل مثلا تیبل user_profiles هم داری که توش مشخصات دیگر یوزر هستن



function UserProfile (){
return $this->hasOne(UserProfile::class );
}


بعد تو کوئریت میزنی



if($request->input('somedata'))
{
$query->whereHas('UserProfile' , function($q) use ($request){
$q->where('somedata' , $request->input('somedata'));
});
}