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());
}
}
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
idon 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.
Most helpful comment
You need to include the
idon your SQL or use->select('*')instead.