Рюкзак-для-laravel отношения n-n и несколько полей выбора

У меня есть три стола: помещения, комнаты и помещения_комнаты.

В комнатах у меня есть поля id и room_name, а также поля создания / изменения метки времени и другие поля настроек.

Третья таблица - это таблица внешних ссылок с двумя полями Accommodation_id и room_id.

Как объясняется здесь: https://laravel.com/docs/5.7/eloquent-relationships#many-to-many Я явно настраиваю свой метод комнат в своей модели размещения:

    public function rooms()
    {
        return $this->belongsToMany('App\Models\Room', 'accomodation_rooms', 'accomodation_id', 'room_id');
    }

Затем я пытаюсь настроить такое поле:

    $room = [
        [       // Select2Multiple = n-n relationship (with pivot table)
        'label' => "Rooms",
        'type' => 'select2_multiple',
        'name' => 'rooms', // the method that defines the relationship in your Model
        'entity' => 'rooms', // the method that defines the relationship in your Model
        'attribute' => 'room_name', // foreign key attribute that is shown to user
        'model' => "App\Models\Rooms", // foreign key model
        'pivot' => true, // on create&update, do you need to add/delete pivot table entries?
        ]
    ];

    $this->crud->addField($room);

Но я получаю следующую ошибку в vendor / backpack / crud / src / PanelTraits / Fields.php, строка 37:

Неопределенный индекс: имя

где у меня этот код:

    // if the label is missing, we should set it
    if (! isset($completeFieldsArray['label'])) {
        $completeFieldsArray['label'] = mb_ucfirst(str_replace('_', ' ', $completeFieldsArray['name']));
    }

Пожалуйста помоги.

Laravel 5,7, рюкзак для Laravel 3.5.


person massimo colella    schedule 06.02.2019    source источник
comment
почему вы только проверяете, установлен ли $completeFieldsArray['label'] сразу после того, как вы используете $completeFieldsArray['name'], которого, похоже, не существует   -  person Mike    schedule 06.02.2019
comment
Привет. Я не проверяю. Я следую рекомендациям здесь: backpackforlaravel.com/docs/3.5/ о том, как настроить поле множественного выбора nn. Ошибка, кажется, исходит из упаковки рюкзака.   -  person massimo colella    schedule 06.02.2019
comment
Вы можете dd($completeFieldsArray)?   -  person violator667    schedule 06.02.2019
comment
Привет. dd внутри вызываемого файла сообщает мне: array: 1 [0 = ›array: 7 [label =› Rooms type = ›select2_multiple name =› rooms entity = ›rooms attribute =› room_name model = ›App \ Models \ Rooms pivot = ›True]] И мне кажется, что это правильный вывод.   -  person massimo colella    schedule 06.02.2019
comment
Как видите, вы используете $completeFieldsArray['name'] и должны использовать $completeFieldsArray[0]['name']   -  person violator667    schedule 06.02.2019
comment
Я не использую элемент массива напрямую. Я использую рюкзак, грубый фреймворк, который должен делать все это за меня. Но у меня проблемы с полями отношений "многие ко многим".   -  person massimo colella    schedule 06.02.2019
comment
Хорошо, я, должно быть, пропустил это :) В таком случае вы пробовали hasMany() вместо belongsToMany() отношений?   -  person violator667    schedule 06.02.2019
comment
Привет. Да я сделал это. Это не сработало. Не должно.   -  person massimo colella    schedule 07.02.2019


Ответы (1)


Наконец-то я получил ошибку опечатки. Массив определения поля должен быть более простым, без квадратных скобок одного уровня.

$room = [ // Select2Multiple = n-n relationship (with pivot table)
    'label' => "Rooms",
    'type' => 'select2_multiple',
    'name' => 'rooms', // the method that defines the relationship in your Model
    'entity' => 'rooms', // the method that defines the relationship in your Model
    'attribute' => 'room_name', // foreign key attribute that is shown to user
    'model' => "App\Models\Rooms", // foreign key model
    'pivot' => true, // on create&update, do you need to add/delete pivot table entries?
];
person massimo colella    schedule 07.02.2019