Package Data | |
---|---|
Maintainer Username: | mayoz |
Maintainer Contact: | srcnckr@gmail.com (Sercan Çakır) |
Package Create Date: | 2015-03-29 |
Package Last Update: | 2015-11-06 |
Home Page: | |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-15 15:23:00 |
Package Statistics | |
---|---|
Total Downloads: | 117 |
Monthly Downloads: | 1 |
Daily Downloads: | 0 |
Total Stars: | 9 |
Total Watchers: | 3 |
Total Forks: | 1 |
Total Open Issues: | 0 |
With this package, you can optimize query clauses calling before or after the filter. You can manage your queries from a single interface.
PHP 5.5.9+ or HHVM, and Composer are required.
To get the latest version of Eloquent Filterable, simply add the following line to the require block of your composer.json
file:
"require": {
"mayoz/eloquent-filterable": "~2.0"
}
You'll then need to run composer install
or composer update
to download it and have the autoloader updated. Or use to shortcut installed through terminal:
composer require mayoz/eloquent-filterable ~2.0
Filterable
trait and use the query filters in the Eloquent model.All filters should be extend Mayoz\Filter\Filter
abstract class. Thus, can be used before
and after
methods in your filters.
The before
method responsible to position the head of the WHERE clause of the query. For example; we need published = 1
of query WHERE clause. However, this clause would like to work on before the other clauses.
<?php namespace App\Filters;
use Mayoz\Filter\Filter;
class PublishedFilter extends Filter
{
/**
* The first executable filter clause.
*
* @param mixed $query
* @return void
*/
public function before($query)
{
$query->where('published', '=', 1);
}
}
The after
method responsible to position the end of the WHERE clause of the query. For example, if need status = 'active'
of query WHERE clause. However, this clause would like to work on after the other clauses.
<?php namespace App\Filters;
use Mayoz\Filter\Filter;
class StatusActiveFilter extends Filter
{
/**
* The last executable filter clause.
*
* @param mixed $query
* @return void
*/
public function after($query)
{
$query->where('status', '=', 'active');
}
}
Create your model file. If you want to manage queries add the Filterable
trait your model file. And than, assign the all associative filters to $filters
variable. Consider the following example:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use Mayoz\Filter\Filterable;
class Post extends Model
{
use Filterable;
/**
* The attributes that should be filter.
*
* @var array
*/
protected $filters = [
'App\Filters\StatusActiveFilter',
'App\Filters\PublishedFilter'
];
// other things...
}
Important: The order of the filter is important when adding (if need multiple before or after filters) query clause. The before filters are added the head of the clause according to the reference sequence. Likewise, the after filters.
Now the Post
model is ready to use. You ready? Okay, we're testing the query. Don't forget to enable the query logging for examine the model queries.
$model = \App\Post::where('views', '>', 100)->get();
Query logging output:
SELECT *
FROM `posts`
WHERE `published` = 1 # added by automatic filter.
AND `views` > 100 # user defined where clause
AND `status` = 'active' # added by automatic filter.
For example, you might want to show only the approved text of the visitors on the site. However, administrators can see them all. Create a new extended filter:
<?php namespace App\Filters;
use Auth;
use Mayoz\Filter\Filter;
class StatusActiveFilter extends Filter
{
/**
* The last executable filter clause.
*
* @param mixed $query
* @return void
*/
public function after($query)
{
# assume, the `users` table has `role` field.
if (array_get(Auth::user(), 'role') != 'administrator')
{
$query->where('status', '=', 'active');
}
}
}
Hocus, pocus! Visitors will display only the active posts. But administrator display all. Ok?
Love innovation and simplicity. Please use issues all errors or suggestions reporting. Follow the steps for contributing:
Please create your tests and check before PR. Use the command:
$ phpunit
Eloquent Filterable is licensed under The MIT License (MIT).