Laravel-datatables: UniversityDataTablesEditor::editRules() must be an instance of Illuminate\\Database\\Eloquent\\Model

Created on 15 Jan 2019  路  3Comments  路  Source: yajra/laravel-datatables

Hi,
I'm facing problem when updated and deleting a record. My code is below;

Error Message
{
"message": "Argument 1 passed to App\DataTables\UniversityDataTablesEditor::editRules() must be an instance of Illuminate\Database\Eloquent\Model, null given, called in D:\Sajid\Projects\ERP\vendor\yajra\laravel-datatables-editor\src\DataTablesEditor.php on line 175",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",
"file": "D:\Sajid\Projects\ERP\app\DataTables\UniversityDataTablesEditor.php",

Blade file

@extends('adminlte::page')

@section('title', 'Dashboard')

@section('content_header')
<h1>
    Users Table
</h1>
@stop
@section('content')
    <!-- Main content -->
      <div class="row">
        <div class="col-xs-12">
          <div class="box">
            <div class="box-header">
              <h3 class="box-title">Data Table With Full Features</h3>
            </div>
            <!-- /.box-header -->
            <div class="box-body">
                {{$dataTable->table(['id' => 'university',"class"=>'table table-responsive table-bordered table-striped table-hover'])}}
            </div>
            <!-- /.box-body -->
          </div>
          <!-- /.box -->
        </div>
        <!-- /.col -->
      </div>
      <!-- /.row -->
@stop

@section('css')
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/css/dataTables.bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.1.0/css/responsive.bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.5.0/css/buttons.bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/select/1.2.4/css/select.bootstrap.min.css">
{{-- <link rel="stylesheet" href="{{asset('css/editor.dataTables.css')}}"> --}}
<link rel="stylesheet" href="{{asset('css/editor.bootstrap.css')}}">
@stop

@section('js')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.5.0/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/select/1.2.4/js/dataTables.select.min.js"></script>
<script src="{{asset('js/dataTables.editor.js')}}"></script>
<script src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.5.0/js/buttons.bootstrap.min.js"></script>
<script src="{{asset('js/editor.bootstrap.min.js')}}"></script>
<script>
  $(function() {
      $.ajaxSetup({
          headers: {
              'X-CSRF-TOKEN': '{{csrf_token()}}'
          }
      });

      var editor = new $.fn.dataTable.Editor({
          ajax: "/university",
          table: "#university",
          display: "bootstrap",
          idSrc: "id",
          fields: [
              {label: "Name:", name: "name"},
              {label: "Abbreviation", name: "abbreviation"},
              {label: "Main Campus Phone:", name: "main_campus_phone"},
              {label: "Main Campus Email:", name: "main_campus_email"},
              {label: "Main Campus Address:", name: "main_campus_address"},
              {
                label: "Logo:",
                name: "logo",
            }
          ],
      });

      $('#university').on('click', 'tbody td:not(:first-child)', function (e) {
          editor.inline(this);
      });

      {{$dataTable->generateScripts()}}
  })
</script>
@stop

Datatable Editor Code

<?php

namespace App\DataTables;

use App\University;
use Illuminate\Validation\Rule;
use Yajra\DataTables\DataTablesEditor;
use Illuminate\Database\Eloquent\Model;

class UniversityDataTablesEditor extends DataTablesEditor
{
    protected $model = University::class;

    /**
     * Get create action validation rules.
     *
     * @return array
     */
    public function createRules()
    {
        return [
            'name'  => 'required',
        ];
    }

    /**
     * Get edit action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function editRules(Model $model)
    {
        return [
            'name'  => 'required',
        ];
    }

    /**
     * Get remove action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function removeRules(Model $model)
    {
        return [];
    }
}
**Datatable Code**

<?php

namespace App\DataTables;

use App\University;
use Yajra\DataTables\Services\DataTable;

class UniversityDataTable extends DataTable
{
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables($query)->setRowId('id')->addColumn('id', '');
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\University $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query(University $model)
    {
        return $model->newQuery()->select('name', 'abbreviation', 'main_campus_phone', 'main_campus_email', 'main_campus_address' , 'logo');
    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->parameters([
                        'dom' => 'Bfrtip',
                        'order' => [1, 'asc'],
                        'select' => [
                            'style' => 'os',
                            'selector' => 'td:first-child',
                        ],
                        'buttons' => [
                            ['extend' => 'create', 'editor' => 'editor'],
                            ['extend' => 'edit', 'editor' => 'editor'],
                            ['extend' => 'remove', 'editor' => 'editor'],
                        ]
                    ]);
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            [
                'data' => null,
                'defaultContent' => '',
                'className' => 'select-checkbox',
                'title' => '',
                'orderable' => false,
                'searchable' => false
            ],
            'name',
            'abbreviation',
            'main_campus_phone',
            'main_campus_email',
            'main_campus_address',
            'logo',
        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'University_' . date('YmdHis');
    }
}

Controller Code

<?php

namespace App\Http\Controllers\Settings;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\University;
use Yajra\Datatables\Datatables;
use App\DataTables\UniversityDataTable;
use App\DataTables\UniversityDataTablesEditor;

class UniversityController extends Controller
{
    public function index(UniversityDataTable $dataTable)
    {
        return $dataTable->render('settings.university');
    }

    public function store(UniversityDataTablesEditor $editor)
    {
        return $editor->process(request());
    }
}

  • Operating System
  • PHP Version=7.1
  • Laravel Version=5.7
editor question

Most helpful comment

You need to include the id on your SQL or use ->select('*') instead.

    public function query(University $model)
    {
        return $model->newQuery()->select('name', 'abbreviation', 'main_campus_phone', 'main_campus_email', 'main_campus_address' , 'logo');
    }

All 3 comments

Please somebody help me i'm stuck. Using latest version of Yajra datatable

You need to include the id on your SQL or use ->select('*') instead.

    public function query(University $model)
    {
        return $model->newQuery()->select('name', 'abbreviation', 'main_campus_phone', 'main_campus_email', 'main_campus_address' , 'logo');
    }

You need to include the id on your SQL or use ->select('*') instead.

    public function query(University $model)
    {
        return $model->newQuery()->select('name', 'abbreviation', 'main_campus_phone', 'main_campus_email', 'main_campus_address' , 'logo');
    }

Thanks for your help.

Was this page helpful?
0 / 5 - 0 ratings