sukohi/smoothness
Smoothness
A Laravel package to manage WHERE clause.
(This is for Laravel 5+. For Laravel 4.2)
Installation
Execute composer command.
composer require sukohi/smoothness:4.*
Preparation
At first, set SmoothnessTrait in your Model.
use Sukohi\Smoothness\SmoothnessTrait;
class Item extends Eloquent {
use SmoothnessTrait;
}
Secondary, add configuration values also in your Model.
columns: keys and column names you want to use. (Required)
labels: Labels and keys you want to use. (Optional)
condition: Condition type which are and & or (Optional, Default: auto)
protected $smoothness = [
'columns' => [
'search_id' => 'id',
'search_title' => 'title',
'search_date' => 'created_at'
],
'labels' => [
'search_id' => 'ID',
'search_title' => 'Item Title',
'search_date' => 'Date'
],
'condition' => 'and'
];
Note: If you set auto in condition, you can change condition value through URL params like this.
Query Scope: You also can utilize Query Scopes instead of column name.
'columns' => [
'scope_title' => 'scope::filterTitle'
],
in this case, you need to prepare a scope method in your model. (About Query Scopes)
public function scopeFilterTitle($query, $value) {
return $query->where('title', $value);
}
Label You can use label:: prefix to call a specific method.
'labels' => [
'title' => 'label::filterTitle'
],
in this case, you need to prepare a method in your model.
public function labelFilterTitle() {
return 'Your Title'.
}
(You may use this tip for switching locale and so on.)
Usage
Now you can use a method called smoothness.
(in Controller)
$items = Item::smoothness()->get();
After call smoothness(), you can access to sort data through $smoothness.
(in View)
condition: Current condition. and & or.
Condition: {{ $smoothness->condition }}
values: Submitted data.
@foreach($smoothness->values as $key => $value)
<input type="text" name="{{ $key }}" value="{{ $value }}">
@endforeach
or
$smoothness->values->get('KEY_NAME');
has_values: Submitted data that has value.
@foreach($smoothness->has_values as $column => $value)
{{ $column }} => {{ $value }}
@endforeach
or
$smoothness->has_values->get('KEY_NAME');
labels: Array values of columns that has value.
@foreach($smoothness->labels as $key => $label)
{{ $label }}
@endforeach
conditions: Array values of columns that has value.
@foreach($smoothness->conditions as $key => $boolean)
<input type="radio" name="condition" value="{{ $key }}"{{ ($boolean) ? ' checked' : '' }}>{{ ($key == 'and') ? 'And' : 'Or' }}
@endforeach
appends: Array values for pagination
{{ $items->appends($smoothness->appends)->links() }}
Change condition
The 1st argument is for setting condition type.
Item::smoothness('or')->get();
Relationship
You can use this package with relationship using join().
(in Controller)
$items = Item::join('item_details', 'item_details.item_id', '=', 'items.id')
->smoothness()
->paginate(5);
(in Model)
protected $smoothness = [
'columns' => [
'items.id' => 'ID',
'items.title' => 'Title',
'items.created_at' => 'Date',
'item_details.address' => 'Address'
]
];
License
This package is licensed under the MIT License.
Copyright 2016 Sukohi Kuhoh
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 4.0.6 | ~5.0 | |||
| 4.0.5 | ~5.0 | |||
| 4.0.4 | ~5.0 | |||
| 4.0.3 | ~5.0 | |||
| 4.0.2 | ~5.0 | |||
| 4.0.1 | ~5.0 | |||
| 4.0.0 | ~5.0 | |||
| 3.0.8 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.7 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.6 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.5 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.4 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.3 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.2 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.1 | >=5.4.0 | 4.2.* | MIT | |
| 3.0.0 | >=5.4.0 | 4.2.* | MIT | |
| 2.0.1 | ~5.0 | |||
| 2.0.0 | ~5.0 | |||
| 1.0.1 | >=5.4.0 | 4.2.* | MIT | |
| 1.0.0 | >=5.4.0 | 4.2.* | MIT |