Ошибка 500 с редактором таблиц данных с laravel

Я установил таблицы данных с помощью редактора из пакета yajra / laravel-datatables-editor. Я могу получить его там, где таблица данных появляется и работает, но когда я пытаюсь редактировать поле, оно не обновляется, и я получаю ошибку 500 при вызове ajax с этим сообщением «Ошибка типа: аргумент 1 передан в App \ DataTables \ DioceseDataTablesEditor: : editRules () должен быть экземпляром Illuminate \ Database \ Eloquent \ Model, задано значение null "

Я следовал руководству пользователя, которое предоставляется с пакетом, просто используя другую таблицу с разными строками. Ищу некоторую помощь, так как я в тупике, что мне не хватает.

Вот мой файл DioceseDataTablesEditor.php, в котором возникает ошибка.

namespace App\DataTables;

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

class DioceseDataTablesEditor extends DataTablesEditor
{
    protected $model = Diocese::class;

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

    /**
     * Get edit action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function editRules(Model $model) //This is where the error occurs
    {
        return [
           // 'diocese'  => 'sometimes|required',
        ];
    }

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

        /**
    * Pre-update action event hook.
    *
    * @param Model $model
    * @return array
    */
    public function updating(Model $model, array $data)
    {
        return $data;
    }
}

Я замечаю, что в вызове ajax он никогда не отправляет уникальный идентификатор строки, которая представляет собой столбец с именем link, который я установил в модели епархии. Это то, что я думаю, может быть проблемой. Он отправляет только следующее в поля сообщения.

action: edit data [link] [denominat]: Other // это настоящая словесная ссылка, а не значение ссылки с целым числом.

Вот мой javascript для этого.

$(function() {
                $.ajaxSetup({
                    headers: {
                        'X-CSRF-TOKEN': '{{csrf_token()}}'
                    }
                });

                var editor = new $.fn.dataTable.Editor({
                    ajax: "/admin/diocese",
                    table: "#diocese",
                    display: "bootstrap",
                    fields: [
                        { label: 'link', name: 'link' },
                        { label: 'denominat', name: 'denominat', type: 'select', options: [
                            "Catholic", "Episcopal", "Methodist", "PNCC", "American Baptist", "ELCA", "AMEZC", "Presbyterian", "Individual", "Other", "AME Church", "ACNA"
                        ] },
                        { label: 'abbrev', name: 'abbrev' },
                        { label: 'diocese', name: 'diocese' },
                        { label: 'addrone', name: 'addrone' },
                        { label: 'addrtwo', name: 'addrtwo' },
                        { label: 'city', name: 'city' },
                        { label: 'state', name: 'state' },
                        { label: 'zipcode', name: 'zipcode' },
                        { label: 'telephone', name: 'telephone' },
                    ]
                });

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

                {{$dataTable->generateScripts()}}
            })

Любая помощь будет оценена по достоинству.

Редактировать. Вот контроллер

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\DataTables\DioceseDataTable;
use App\DataTables\DioceseDataTablesEditor;
use Illuminate\Support\Facades\Schema;

class DioceseController extends Controller
{
    public function index(DioceseDataTable $dataTable)
    {
        return $dataTable->render('admin.diocese.index');
    }

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

    }

    public function getTableColumns($table)
    {
        return Schema::getColumnListing($table);
    }

}

person Chris    schedule 22.02.2018    source источник
comment
Можете ли вы опубликовать свой код контроллера для маршрута "/admin/diocese"   -  person Nikola Gavric    schedule 22.02.2018
comment
Я только что добавил.   -  person Chris    schedule 23.02.2018


Ответы (1)


Я смог решить эту проблему и оставлю ответ для использования в будущем. Думая, что данные отправляются как data [link] [denominat] = "Others", было неверно, я установил простую тестовую форму для отправки этих данных в виде сообщения ajax, но посмотрим, как я думал, что это должно выглядеть, это будут данные [42456 ] [denominat] = "Others", и когда я это сделал, все заработало отлично.

Затем я посмотрел больше в документации редактора, и мне пришлось сообщить редактору имя моего первичного ключа, который был «ссылкой». Таким образом, код изменен на то, что показано ниже.

var editor = new $.fn.dataTable.Editor({
                    ajax: "/admin/diocese",
                    table: "#diocese",
                    idSrc: "link",  // ##added this line 
                    display: "bootstrap",
                    fields: [
                        { label: 'link', name: 'link' },
                        { label: 'denominat', name: 'denominat', type: 'select', options: [
                            "Catholic", "Episcopal", "Methodist", "PNCC", "American Baptist", "ELCA", "AMEZC", "Presbyterian", "Individual", "Other", "AME Church", "ACNA"
                        ] },
                        { label: 'abbrev', name: 'abbrev' },
                        { label: 'diocese', name: 'diocese' },
                        { label: 'addrone', name: 'addrone' },
                        { label: 'addrtwo', name: 'addrtwo' },
                        { label: 'city', name: 'city' },
                        { label: 'state', name: 'state' },
                        { label: 'zipcode', name: 'zipcode' },
                        { label: 'telephone', name: 'telephone' },
                    ]
                });
person Chris    schedule 23.02.2018