معرفی پکیج کاربردی Eloquent Filter در لاراول

تا حالا تجربه ساخت صفحات گزارش گیری ادمین یا ساخت صفحات با فیلتر های جستجوی متعدد در لاراول داشتید؟اگر پیاده سازی این قبیل امکانات را تجربه کردید.قطعا میدونید که ساخت این قبیل صفحات نیازمند دریافت یکسری داده از کاربر و ساخت کوعری بر اساس اون داده ها هست.امروز پکیج Eloquent filter رو معرفی میکنم که این مشکل رو خیلی راحت حل میکنه و دیگه نیازی نیست درگیر پیچیدگی های کوعری های صفحات فیلتر بشید و حتی نیازی نیست خیلی از کوعری ها رو خودتون بزنید و کوعری ها با استفاده از پارامتر های query string ساخته می شوند.فکر میکنم با مثال بهتر منظور خودم رو برسونم.Jengaاولین راه حل =! بهترین راه حلاولین راه حلی که به ذهن اکثر توسعه دهنده ها میرسه اینه که برای هر داده ورودی یک نوع کوعری بسازیم.خب این مشکل با این راه حل حل میشه ولی قطعا در آینده کدهایی خواهید داشت که ده ها دستور شرطی برای هر نوع فیلد دارند.که قطعا پیچیدگی زیادی به کد شما وارد می کند و همچنین خوانایی کد شما کاهش می یابد.به طور مثال این نوع url را ببینید:http://localhost:8000/users/search?age_more_than=25&gender=male&created_at=25-09-2019 https://gist.github.com/mehdi-fathi/fb03bf7eb1f817aecb06c1a61f9ff221 کد بالا نحوه پیاده سازی در روش قدیمی هست همانطور که می بینید برای هر نوع دیتا یک دستور شرطی درست شده است. البته شاید بشه حالا فرض کنید در اینده فیلتر شما کمی پیشرفته تر شود اون موقع نگهداری و پیاده سازی امکانات جدید یه مقدار پیچیده و سخت خواهد شد.معرفی Eloquent Filterتصور کنید شما یک پکیج نصب کنید که با استفاه از یسری قواعد query string شما رو تبدیل به یسری از شرط های mysql کند و کلا پیچیدگی پیاده سازی این قبیل امکانات رو بر عهده بگیره در ضمن حتی برخی کوعری ها را با توجه به پارامتر های ورودی بسازه. شما فقط دیتاهای مورد نظر رو به صورت query string به Controller خودتون تو فریم ورک لاراول پاس دهید همین‌!.قطعا این پکیج میتونه سرعت و تمیزی کد شما رو بالاتر ببره.نصب و پیاده سازیبه تازگی ورژن جدید eloquent filter منتشر شده همراه با ویژگی های بسیار کاربردی که میتونید از لینک گیت هاب جدیدترین نسخه آن که ورژن ۲ این پکیج هست را نصب و استفاده کنید.برای دریافت نسخه جدید این لینک را کلیک کنید.اول با استفاده از composer پکیج را نصب میکنیم.$ composer require mehdi-fathi/eloquent-filter:1.6.9 پیاده سازی در Modelطبق کد زیر باید Filterable trait را به مدل خودتون اضافه کنید.همچنین فیلد های که میخواهید در فیلتر استفاده کنید باید در whiteListFilter مقدار دهی کنید. https://gist.github.com/mehdi-fathi/131a9b4339f59265a899a38dd41a5a29 با این مقدار دهی میتوانید همه ی فیلد ها را برای فیلتر باز بگذارید.private static $whiteListFilter = ['*'];پیاده سازی در Controller https://gist.github.com/mehdi-fathi/75b647d421aca420b9ed0c6ec781df6b به همین سادگی حالا فقط کافیه داده ها از سمت blade laravel به سمت کنترولر ارسال شود تا خروجی کوعری تولید شود.مثال های استفاده از پکیجدستورات شرطی سادهپارامتر های ارسالی GET موجب ساخت کوعری های به شکل زیر می شود.(به صورت کاملا خودکار)/users/list?email=mehdifathi.developer@gmail.com SELECT ... WHERE ... email = 'mehdifathi.developer@gmail.com' /users/list?first_name=mehdi&last_name=fathi SELECT ... WHERE ... first_name = 'mehdi' AND last_name = 'fathi' /users/list?username[]=ali&username[]=ali22&family=ahmadi SELECT ... WHERE ... username = 'ali' OR username = 'ali22' AND family = 'ahmadi' عملگر ها در دستورات شرطیشما می توانید عملگر ها را داخل پارامتر بدین صورت استفاده کنید./users/list?count_posts[operator]=>&count_posts[value]=35 SELECT ... WHERE ... count_posts > 35 /users/list?username[operator]=!=&username[value]=ali SELECT ... WHERE ... username != 'ali' /users/list?count_posts[operator]=<&count_posts[value]=25 SELECT ... WHERE ... count_posts < 25شما می توانید پارمترهای limit , orderby را در URL ست کنید./users/list?f_params[limit]=1 SELECT ... WHERE ... order by `id` desc limit 1 offset 0 /users/list?f_params[orderBy][field]=id&f_params[orderBy][type]=ASC SELECT ... WHERE ... order by `id` ASC limit 10 offset 0شرط های پیشرفته برای ساخت کوعری های در یک بازه خاص مثه کوعری های بر حسب تاریخ باید پارامتر ها به این صورت ارسال شود./users/list?created_at[start]=2016/05/01&created_at[end]=2017/10/01 SELECT ... WHERE ... created_at BETWEEN '2016/05/01' AND '2017/10/01'شما میتوانید تمام این شرط ها را داخل یک سری از پارامترها به پکیج ارسال کنید./users/list?count_posts[operator]=>&count_posts[value]=10&username[]=ali&username[]=mehdi&family=ahmadi&created_at[start]=2016/05/01&created_at[end]=2020/10/01&f_params[orderBy][field]=id&f_params[orderBy][type]=ASCselect * from `users` where `count_posts` > 10 and `username` in ('ali', 'mehdi') and `family` = ahmadi and `created_at` between '2016/05/01' and '2020/10/01' order by 'id' asc limit 10 offset 0 برای راهنمایی بیشتر می توانید فایل README.md این پکیج را مشاهده کنید.فقط توجه داشته باشید فیلد هایی که می خواهید شرط ها را رو آن اعمال شود.باید داخل آرایه whiteListFilter$ ست شده باشد.اگر نظر یا ایده ای درباره این پکیج دارید خوشحال میشم زیر این پست بخونم و یا به صورت issues داخل صفحه گیت هاب این پکیج ببینم.مرسی