PHP code example of l3aro / pipeline-query-collection
1. Go to this page and download the library: Download l3aro/pipeline-query-collection library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
l3aro / pipeline-query-collection example snippets
return [
// key to detect param to filter
'detect_key' => env('PIPELINE_QUERY_COLLECTION_DETECT_KEY', ''),
// type of postfix for date filters
'date_from_postfix' => env('PIPELINE_QUERY_COLLECTION_DATE_FROM_POSTFIX', 'from'),
'date_to_postfix' => env('PIPELINE_QUERY_COLLECTION_DATE_TO_POSTFIX', 'to'),
// default motion for date filters
'date_motion' => env('PIPELINE_QUERY_COLLECTION_DATE_MOTION', 'find'),
];
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Baro\PipelineQueryCollection\Concerns\Filterable;
use Baro\PipelineQueryCollection\Contracts\CanFilterContract;
class YourModel extends Model implements CanFilterContract
{
use Filterable;
public function getFilters(): array
{
return [
// the filter and sorting that your model need
];
}
}
YourModel::query()->filter()->get();
YourModel::query()->filter([
// the custom filter and sorting that your model need
])
->paginate();
use Baro\PipelineQueryCollection\BitwiseFilter;
// users?permission[0]=2&permission[1]=4
User::query()->filter([
BitwiseFilter::make('permission'), // where permission & 6 = 6
]);
use Baro\PipelineQueryCollection\BooleanFilter;
// users?is_admin=1
User::query()->filter([
BooleanFilter::make('is_admin'), // where is_admin = 1
]);
use Baro\PipelineQueryCollection\DateFromFilter;
use Baro\PipelineQueryCollection\Enums\MotionEnum;
// users?updated_at_from=2022-05-31
User::query()->filter([
DateFromFilter::make('updated_at'), // where updated_at >= 2022-05-31
DateFromFilter::make('updated_at', MotionEnum::TILL), // where updated_at > 2022-05-31
// you can config default motion behavior and the postfix `from` in the config file
]);
use Baro\PipelineQueryCollection\DateToFilter;
use Baro\PipelineQueryCollection\Enums\MotionEnum;
// users?updated_at_to=2022-05-31
User::query()->filter([
DateToFilter::make('updated_at'), // where updated_at <= 2022-05-31
DateToFilter::make('updated_at', MotionEnum::TILL), // where updated_at < 2022-05-31
// you can config default motion behavior and the postfix `to` in the config file
]);
use Baro\PipelineQueryCollection\ExactFilter;
// users?id=4
User::query()->filter([
ExactFilter::make('id'), // where id = 4
]);
use Baro\PipelineQueryCollection\RelationFilter;
// users?roles_id[0]=1&roles_id[1]=4
User::query()->filter([
RelationFilter::make('roles', 'id'), // where roles.id in(1,4)
]);
// users?search=Baro
// User.php
public function scopeSearch(Builder $query, string $keyword)
{
return $query->where(function (Builder $query) use ($keyword) {
$query->where('id', $keyword)
->orWhere('name', 'like', "%{$keyword}%");
});
}
// Query
use Baro\PipelineQueryCollection\ScopeFilter;
User::query()->filter([
ScopeFilter::make('search'), // where (`id` = 'Baro' or `name` like '%Baro%')
]);
use Baro\PipelineQueryCollection\TrashFilter;
// ?removed=only
User::query()->filter([
TrashFilter::make('removed'), // where `deleted_at` is not null
]);
use Baro\PipelineQueryCollection\ScopeFilter;
// users?sort[name]=asc&sort[permission]=desc
User::query()->filter([
Sort::make(), // order by `name` asc, `permission` desc
]);
use Baro\PipelineQueryCollection\ExactFilter;
// users?filter[id]=4&filter[permission][0]=1&filter[permission][1]=4
User::query()->filter([
ExactFilter::make('id')->detectBy('filter.'), // where id = 4
BitwiseFilter::make('permission')->detectBy('filter.'), // where permission & 5 = 5
]);
// users?filter[id]=4&filter[permission][0]=1&filter[permission][1]=4
// .env
PIPELINE_QUERY_COLLECTION_DETECT_KEY="filter."
// Query
User::query()->filter([
ExactFilter::make('id'), // where id = 4
BitwiseFilter::make('permission'), // where permission & 5 = 5
]);
// users?reply=baro
User::query()->filter([
RelativeFilter::make('reply')->filterOn('respond'), // where respond like '%baro%'
]);