Laravel Model Search یک پکیج سبک و با کاربرد آسان است تا بتوانید پرس و جوهای جستجوی پویا را برای مدلهای خاص با Laravel یا Illuminate 5.8 ایجاد کنید.
دستور کامپوزر `composer require skyraptor/modelsearch` را برای نصب ساده اجرا کنید تا آخرین نسخه موجود نصب شود و سپس برای بروزرسانی دستور زیر را اجرا کنید.
composer update
این بسته با استفاده از ServiceProvider بسته Laravels ، ServiceProvider خود را ثبت می کند.
این بسته شامل پرونده پیکربندی خود می باشد که شما باید با دستور `php artisan vendor:publish` و دنبال کردن نمونه های موجود در screenafterward. در فایل پیکربندی باید فضای نام را برای فهرست فیلترها و پیشوند فیلتر درخواست خود تنظیم کنید.
return [
'filtersFQCN' => 'App\\Filters\\',
'requestFilterPrefix' => 'filter_'
];
برای تعریف یک فیلتر ، باید پوشه ای را ایجاد کنید که به عنوان مدل خود در فهرست پوشه فیلترهای شما قرار گیرد. در این پوشه می توانید پوشه مخصوص مدل را ایجاد کنید. مثلا:
مثلا:
فیلتر شما باید مدل ModelSearch \ Contracts \ Filter را گسترش دهد.
path\to\laravel\app\Filters\User\HasId.php
<?php
namespace App\Filters\User;
use ModelSearch\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;
class HasId implements Filter
{
/**
* Apply a given search value to the builder instance.
*
* @param Builder $builder
* @param integer $value
* @return Builder $builder
*/
public static function apply(Builder $builder, $value)
{
return $builder->where( 'id', $value );
}
}
درخواست پیشوند فیلتر در پیکربندی پیشوند مورد استفاده برای نام فیلترها را در پارامترهای درخواست تعریف می کند. این می تواند مورد استفاده قرار گیرد تا به کاربر اجازه دهد فیلترهای درخواست POST و GET را اعمال کند. این کار باید با فراخوانی روش 'addRequestFilters' و ارائه نمونه درخواست (Request) انجام شود.
همیشه به یاد داشته باشید که فیلترها را به ترتیب مناسب اعمال کنید.
$search = new ModelSearch( User::class );
$search->addRequestFilters( $request );
$result = $search->result();
می توانید پیشوند فیلتر جستجو را با فراخوانی متد `setRequestFilterPrefix()`تغییر دهید و یک پیشوند جدید ارائه دهید.
مثال زیر نحوه استفاده از جستجو در Controller را به شما نشان می دهد:
namespace ModelSearch\ModelSearch;
public function someController( Request $request ) {
...
$search = new ModelSearch( User::class );
$search->addFilters([
'HasId' => 1,
'HasLastName' => 'Doe'
]);
$search->addFilter('SomeFilter', 'value');
$result = $search->result();
// The search can be extended after processing results
$search->addFilter('AnotherFilter', 'value');
$result2 = $search->result();
...
}