Обновить простое текстовое поле во взаимосвязи - PullRequest
0 голосов
/ 28 мая 2020

Начнем с того, что я новичок в рюкзаке CRUD, но я не нашел ответа на свою конкретную проблему.

У меня есть 2 таблицы, users и usersprofiles. Все профили пользователей можно создавать / редактировать через CRUD. Когда я создаю новый профиль, я создаю его автоматически. Мой профиль belongsTo a user и user hasOne профиль.

На моей панели userprofile CRUD я хочу изменить адрес электронной почты и пароль, принадлежащие пользователю. Я добавил отображаемые поля и с нетерпением жду загрузки связанного с ним пользователя.

Когда я создаю профиль, все работает отлично! Но когда я хочу обновить, все поля, которых нет в модели профиля, не обновляются. Более того, наблюдатель вообще не используется.

Мой вопрос прост, есть ли простой способ обновить простые текстовые поля в отношении.

Спасибо

основной контроллер CRUD:

class PatientCrudController extends PatientAidantBaseController
{
    use ReviseOperation;

    /**
     * Setup
     *
     * @return void
     */
    public function setup()
    {
        $this->crud->setModel(Patient::class);
        $this->crud->with('user');
        $this->crud->setRoute(config('backpack.base.route_prefix') . '/patient');
        $this->crud->setEntityNameStrings('patient', 'patients');
    }

    /**
     * SetupListOperation
     *
     * @return void
     */
    protected function setupListOperation()
    {
        parent::setupListOperation();

        $this->crud->addColumn(
            [
                'name' => 'numeroHedonix',
                'label' => "Numéro Hedonix",
                'type' => 'text'
            ]
        );
    }

    /**
     * SetupCreateOperation
     *
     * @return void
     */
    protected function setupCreateOperation()
    {
        $this->crud->addFields([
            [   'name' => 'numeroHedonix',
                'type' => 'text',
                'label' => 'Numéro Hedonix',
                'default' => Patient::getNextHedonixNumber(),
                'wrapper' => [
                    'class' => 'form-group col-md-4',

                ],
                'attributes' => [
                    'readonly' => 'readonly',
                ],
                'tab' => 'Informations patient'
            ],

        ]);

        $this->crud->addFields($this->baseCreationFields());
        $this->crud->addFields([
            [   'name' => 'NIP',
                'type' => 'text',
                'label' => 'NIP',
                'wrapper' => [
                    'class' => 'form-group col-md-6',

                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'NID',
                'type' => 'text',
                'label' => 'NID',
                'wrapper' => [
                    'class' => 'form-group col-md-6',

                ],
                'tab' => 'Informations patient'
            ],
        ]);

        $this->crud->setValidation(PatientRequest::class);
    }

    /**
     * SetupUpdateOperation
     *
     * @return void
     */
    protected function setupUpdateOperation()
    {
        $this->setupCreateOperation();
    }
}

Это расширяет этот контроллер, чтобы объединить функции и поля:

<?php

namespace App\Http\Controllers\Admin;

use App\User;
use App\Enums\SexePatient;
use App\Enums\NiveauEtudePatient;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

abstract class PatientAidantBaseController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
    use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;

    /**
     * SetupListOperation
     *
     * @return void
     */
    protected function setupListOperation()
    {
        $this->crud->addColumn(
            [
                'name' => 'prenom',
                'label' => "Prénom",
                'type' => 'text'
            ]
        );
        $this->crud->addColumn(
            [
                'name' => 'nom',
                'label' => "Nom",
                'type' => 'text'
            ]
        );
        $this->crud->addColumn(
            [
                'name' => 'dateDeNaissance',
                'label' => "Date de naissance",
                'type' => 'date'
            ]
        );
    }
protected function baseCreationFields()
    {
        return [
            [   'name' => 'nom',
                'type' => 'text',
                'label' => 'Nom',
                'wrapper' => [
                    'class' => 'form-group col-md-4'
                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'prenom',
                'type' => 'text',
                'label' => 'Prénom',
                'wrapper' => [
                    'class' => 'form-group col-md-4'
                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'sexe',
                'label' => 'Sexe',
                'type' => 'select_from_array',
                'options' => SexePatient::toSelectArray(),
                'allows_null' => false,
                'default' => 'M',
                'wrapper' => [
                    'class' => 'form-group col-md-4'
                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'dateDeNaissance',
                'type' => 'date',
                'label' => 'Date de naissance',
                'wrapper' => [
                    'class' => 'form-group col-md-4'
                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'dateDeDeces',
                'type' => 'date',
                'label' => 'Date de décès',
                'allows_null' => true,
                'default' => null,
                'wrapper' => [
                    'class' => 'form-group col-md-4'
                ],
                'tab' => 'Informations patient'
            ],
            [   'name' => 'niveauEtude',
                'label' => "Niveau d'étude",
                'type' => 'select_from_array',
                'options' => NiveauEtudePatient::toSelectArray(),
                'allows_null' => true,
                'default' => null,
                'tab' => 'Informations patient'
            ],
            [   'name' => 'user_id',
                'type' => 'hidden',
                'default' => null
            ],
            [   'name' => 'user.email',
                'label' => 'Adresse email',
                'type' => 'email',
                'tab' => 'Informations patient'
                //'tab' => 'Création du compte'
            ],
            [   'name' => 'password',
                'label' => 'Mot de passe',
                'type' => 'password',
                'tab' => 'Informations patient'
                //'tab' => 'Création du compte'
            ],
            [   'name' => 'password_confirmation',
                'label' => 'Confirmation mot de passe',
                'type' => 'password',
                'tab' => 'Informations patient'
                //'tab' => 'Création du compte'
            ],
        ];
    }
}
...