inprohub/laravel-datatables-mongodb

Laravel DataTables plugin to support Mongodb

v1.0.0 2023-10-25 15:47 UTC

This package is auto-updated.

Last update: 2024-10-25 18:07:38 UTC


README

Latest Stable Version Total Downloads License

This package is a plugin for Laravel DataTables to support Mongodb using Laravel Mongodb

Requirements

Documentation

This plugin provides most functionalities described in the Laravel Datatables documentation. See Known issues below

Installation

composer require pimlie/laravel-datatables-mongodb:^1.1

Configure

Check the Laravel DataTables configuration for how to configure and use it.

If you want the datables() and/or of methods to automatically use the correct datatables engine,

Unfortunately we cant use auto-discovery yet, this package will be discoverd before laravel-datatables is and that will overwrite the engines config at the moment

> Although this package has a dependency on laravel-datatables, you need to explictly require the package as auto-discovery works based on the packages listed in the dependencies section of your composer.json.

composer require yajra/laravel-datatables-oracle:"~8.0"
composer require pimlie/laravel-datatables-mongodb:^1.1

so you either you have to add the service provide:

'providers' => [
    ...,
    Yajra\DataTables\DataTablesServiceProvider::class,
    Inprohub\DataTables\MongodbDataTablesServiceProvider::class, // add _after_ Yajra's ServiceProvider
]

or open the config/datatables.php file and add the engines manually to the config:

    /**
     * Datatables list of available engines.
     * This is where you can register your custom datatables engine.
     */
    'engines'        => [
        // The Jenssegers\Mongodb classes extend the default Query/Eloquent classes
        // thus the engines need to be listed above the default engines
        // to make sure they are tried first
        'moloquent'      => Inprohub\DataTables\MongodbDataTable::class,
        'mongodb-query'  => Inprohub\DataTables\MongodbQueryDataTable::class,
        'mongodb-hybrid' => Inprohub\DataTables\HybridMongodbQueryDataTable::class,

        'eloquent'       => Yajra\DataTables\EloquentDataTable::class,
        'query-builder'  => Yajra\DataTables\QueryDataTable::class,
        'collection'     => Yajra\DataTables\CollectionDataTable::class,
    ],

    /**
     * Datatables accepted builder to engine mapping.
     * This is where you can override which engine a builder should use
     * Note, only change this if you know what you are doing!
     */
    'builders'       => [
        //Jenssegers\Mongodb\Eloquent\Builder::class             => 'moloquent',
        //Jenssegers\Mongodb\Query\Builder::class                => 'mongodb-query',
        //Jenssegers\Mongodb\Helpers\EloquentBuilder::class      => 'eloquent',
        //Illuminate\Database\Eloquent\Relations\Relation::class => 'eloquent',
        //Illuminate\Database\Eloquent\Builder::class            => 'eloquent',
        //Illuminate\Database\Query\Builder::class               => 'query',
        //Illuminate\Support\Collection::class                   => 'collection',
    ],

Usage

Use the datatables() method

For this to work you need to have the class definitions added to the engines and builders datatables configuration, see above.

use \App\MyMongodbModel;

$datatables = datatables(MyMongodbModel::all());

Use the dataTable class directly.

use Inprohub\DataTables\MongodbDataTable;

return (new MongodbDataTable(App\User::where('id', '>', 1))->toJson()

Use via trait.

  • Add the MongodbDataTableTrait trait to your model.
use Jenssegers\Mongodb\Eloquent\Model;
use Inprohub\DataTables\Traits\MongodbDataTableTrait;

class User extends Model
{
	use MongodbDataTableTrait;
}
  • Call dataTable() directly on your model.
Route::get('users/data', function() {
	return User::dataTable()->toJson();
});

Known issues

  • the orderColumn and orderColumns methods are empty placeholders and do nothing
  • there is currently no support for viewing/searching/ordering on (non-embedded) relationships between Models (eg through a user.posts column key)