Skip to content
A Laravel package to manage WHERE clause.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


A Laravel package to manage WHERE clause.
(This is for Laravel 5+. For Laravel 4.2)



Execute composer command.

composer require sukohi/smoothness:4.*


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.)


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 }}">


has_values: Submitted data that has value.

@foreach($smoothness->has_values as $column => $value)
    {{ $column }} => {{ $value }}


labels: Array values of columns that has value.

@foreach($smoothness->labels as $key => $label)
    {{ $label }}

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' }}

appends: Array values for pagination

{{ $items->appends($smoothness->appends)->links() }}

Change condition

The 1st argument is for setting condition type.



You can use this package with relationship using join().

(in Controller)

$items = Item::join('item_details', 'item_details.item_id', '=', '')

(in Model)

protected $smoothness = [
	'columns' => [
		'' => 'ID',
		'items.title' => 'Title',
		'items.created_at' => 'Date',
		'item_details.address' => 'Address'


This package is licensed under the MIT License.

Copyright 2016 Sukohi Kuhoh

You can’t perform that action at this time.