Два поля перезаписывают значения друг друга при сохранении в Backpack для Laravel CRUD (проблемы с реализацией spatie / laravel -tags)? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь использовать spatie / laravel -tags вместе с Backpack для Laravel. У меня определены 2 типа тегов. В настоящее время я расширил модель тегов из spatie / laravel -tags как MyCategory и MyTag и добавил глобальные области для разделения двух типов тегов. Это работает до такой степени, что он будет правильно отображать текущие категории и теги в Backpack, но когда я попытаюсь сохранить любые изменения, он сохранит только записи в последнем поле и удалит все в первом поле.

Вот моя текущая конфигурация поля для моего CRUD:

        $this->crud->addField([
            'name' => 'categories',
            'label' => 'Categories',
            'type' => 'select2_multiple',
            'tab' => 'Overview',
            'attribute' => 'name',
            'model' => 'App\MyCategory',
            'pivot' => true,
        ]);

        $this->crud->addField([
            'name' => 'tags',
            'label' => 'Tags',
            'type' => 'select2_multiple',
            'tab' => 'Overview',
            'attribute' => 'name',
            'model' => 'App\MyTag',
            'pivot' => true,
        ]);

Когда я проверяю Laravel Телескоп, я вижу, что то же самое происходит для обоих полей. Сначала удаляются все текущие теги (независимо от типа) для элемента, который я сохраняю, и добавляются новые теги из поля. Затем это повторяется для второго поля, которое, конечно же, удаляет теги из первого поля, которое также должно быть сохранено.

Кажется, что GlobalScope в моих расширенных моделях тегов не подходит для этой части. Есть ли способ повторно ввести области в запросы, выполняемые рюкзаком, чтобы эти теги сохранялись правильно?

1 Ответ

0 голосов
/ 28 мая 2020

В моем CrudController я создал собственные функции обновления и хранения. См. Пример обновления ниже. Кажется, это нормально работает. По-прежнему выполняется 2 запроса, второй отменяет первый, но для моих целей это достаточно хороший обходной путь, чтобы иметь возможность иметь 2 поля с разными типами тегов в одной и той же форме в Backpack, используя spatie / laravel -теги.

    public function update(UpdateRequest $request)
    {
        $request = request();

        // Merge the values from the two tag fields together into the second field
        $request->merge(['tags' => array_merge((array)$request->input('categories'), (array)$request->input('tags'))]);

        $redirect_location = $this->traitUpdate($request);

        return $redirect_location;
    }
...