1. Go to this page and download the library: Download mustorze/mustafilter 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/ */
mustorze / mustafilter example snippets
class UserFilter extends Mustorze\MustAFilter\Contracts\Filter
{
/**
* Declare here all the filters that can be used in the model
*/
protected $filters = [
'email'
];
/**
* If you're using GraphQL declare here the type and description of the filter
* Available Types: 'string', 'boolean', 'integer', 'float', 'list-of-boolean', 'list-of-integer', 'list-of-float', 'list-of-string'
*/
protected $filtersSpec = [
'email' => [
'type' => 'string', // You can specify any type available in GraphQL from the list above
'description' => 'like filter by user email'
]
];
/**
* The filter will be applied to the constructor with the name declared in $filters
*
* @param $value
* @return mixed
*/
protected function email($value)
{
return $this->builder->where('email', 'LIKE', "%$value%");
}
}
class UsersQuery extends Query
{
/**
* To makes things easy, i've create a const for the filter i will use in this query
*/
const FILTER = UserFilter::class; // it's the same class that was created before
/**
* Query default configuration
*/
protected $attributes = [
'name' => 'Admin users query',
'description' => 'The query pagination of users'
];
/**
* Query default type
*/
public function type()
{
return GraphQL::paginate('user');
}
/**
* Here is the first place we can modify, in this moment we need to use a `getFilterArgs` method to Get all the
* filters we created in the Filter.
* When you use `Filterable` trait, your model own the `getFilterArgs` automatic.
* 1st param - The filter, you can create a infinites filters to use in your queries
* 2nd param - The defaults args, pass in array the default args can you always do to the query
*/
public function args()
{
return User::getFilterArgs($this::FILTER, [
'page' => [
'name' => 'page',
'type' => Type::nonNull(Type::int()),
'description' => 'The page'
],
'limit' => [
'name' => 'limit',
'type' => Type::nonNull(Type::int()),
'description' => 'The limit'
]
]);
}
/**
* The default resolve
*/
public function resolve($root, $args, SelectFields $fields, ResolveInfo $info)
{
$select = $fields->getSelect();
$with = $fields->getRelations();
/**
* The second place to modify we found here, we need to pass filter scope to the builder, and then he will
* validate and apply your filters in the query.
* 1st param - The filter, you can create a infinites filters to use in your queries
* 2rd param - There we pass the args of query, it`s simple, we need to get the passed values from query to
* makes things working.
*/
return User::select($select)
->with($with)
->filter($this::FILTER, $args) // The filter
->paginate($args['limit'], $select, 'page', $args['page']);
}
}
public function fetchAllUsers()
{
return User::where('status', 1) // a default query settings
->get();
}
public function fetchAllUsers()
{
return User::where('status', 1) // a default query settings
->filter(UserFilter::class) // do not need to pass the further parameters
->get();
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.