Skip to content

laravelha/support

Repository files navigation

Laravelha Support

Package of Support for development on Laravel

Install

composer require laravelha/support

Features

  1. Model Traits
    • Tableable
    • RequestQueryBuildable

How Tableable works

Tableable configures models represented in the data table.

Requirements

Step-by-step

  1. Import the trait on model.
use Laravelha\Support\Traits\Tableable;

class Modelo extends Model {
    //
}
  1. Add the trait within class.
class Modelo extends Model {
    use Tableable;
    //
}
  1. Implement the getColumns method.
    /**
     * ['data' => 'columnName', 'searchable' => true, 'orderable' => true, 'linkable' => false]
     *
     * searchable and orderable is true by default
     * linkable is false by default
     *
     * @return array[]
     */
    public static function getColumns(): array
    {
        return [
            ['data' => 'id', 'linkable' => true],
            ['data' => 'title'],
            ['data' => 'subtitle'],
            ['data' => 'slug'],
            ['data' => 'content'],
        ];
    }

The options 'searchable' and 'orderable' are 'true' by default, but 'linkable' is 'false', if not informed.

  1. On index action get the columns configuration.
public function index()
{
    $columns = Model::getColumns();

    return view('models.index', compact('columns'));
}
  1. Create data action on controller.
public function data()
{
    return Model::getDatatable();
}
  1. Create route for data action.
Route::get('/models/data', 'ModelController@data')->name('models.data');
  1. Create table on index blade.
<table id="models-table">
    <thead>
        <tr>
            @foreach($columns as $column)
                <th>@lang('models.'.$column['data'])</th>
            @endforeach
        </tr>
    </thead>
</table>
  1. Config script.
@push('scripts')
<script id="script">
    $(function () {
        var table = $('#models-table').DataTable({
            serverSide: true,
            processing: true,
            responsive: true,
            order: [ [0, 'desc'] ],
            ajax: {
                url: 'models/data'
            },
            columns: @json($columns),
            pagingType: 'full_numbers'
        });
    });
</script>
@endpush

How RequestQueryBuildable works?

RequestQueryBuildable makes behavior of SQL queries by parameters in the request.

  1. Use ?only separated by commas to filter columns like 'select' in SQL
query: only=field1;field2;field3...
  1. Use ?search with key and value to apply where or whereHas
query: ?search=key:value,key2:value2

class MyModel extends Model {
    public static function searchable() {
        return [
                'key' => 'operator',
                'key2' => 'operator',
               ];
    }
    // ...model
} 

define searchable method on model is needed and relationships are identified by dot relation.column

  1. Use ?operators to change search operator dynamically
query: field1:operator1
  1. Use ?sort to sort results
query: ?sort=field:direction;field2:direction
  1. Use ?with to load relation data separated by commas
query: relation1;relation2;relation3...