Рюкзак Laravel — Встроенное создание, связь не добавляется в БД

#php #laravel #laravel-backpack #eloquent-relationship

Вопрос:

Я пытаюсь использовать новую функцию 4.1 «Встроенное создание», но, похоже, я не могу связать идентификаторы созданных элементов. Позвольте мне объяснить, что я делаю / чего я хочу:

У меня есть «Папки», в которых есть «Главы» внутри (так что отношение 1-n).

Мой код:

     CRUD::addField([  //Folder crud
            'name' => 'chapters', 
            'type' => 'relationship',
            'label' => 'Unidad',
            'model' => "AppModelsChapter",
            'inline_create' => [
                'entity' => 'chapter',
                'modal_class' => 'modal-dialog modal-xl',
                'modal_route' => route('chapter-inline-create'),
                'create_route' =>  route('chapter-inline-create-save'),
            ]
        ]);

    protected function setupCreateOperation() //Chapter crud
    {
        CRUD::setValidation(ChapterRequest::class);

        CRUD::addField([
            'name' => 'name', 
            'type' => 'text', 
            'label' => 'Nombre'
        ]);
    }

    public function chapters() //Folder model
    {
        return $this->hasMany(Chapter::class);
    }

    public function folder() //Chapter model
    {
        return $this->belongsTo(Folder::class);
    }
 

Он без проблем создает основной элемент и связанные с ним элементы, но на самом деле ни в какой момент не связывает их в базе данных.

Есть какие-нибудь намеки на то, что я могу делать не так? Следил за документами, но, похоже, не может заставить это работать.

Спасибо.

Комментарии:

1. Есть какие-нибудь успехи? В принципе, у меня та же проблема. Интересно, однако, что при попытке встроенного создания родителя из дочернего элемента это работает. В этом случае, если вы создаете folder что-то изнутри chapter , это работает, но когда вы пытаетесь создать chapter что-то изнутри folder , это зависает навсегда.

Ответ №1:

У вас есть правильные имена столбцов в базе данных ? Столбцы, которые делают связь возможной, т. е. в таблице папок у вас должен быть столбец с именем что-то вроде chapter_name или chapter_id, чтобы определить главу, к которой принадлежит папка.

Более того, если эти столбцы не соответствуют соглашениям laravel, вам необходимо добавить их в качестве второго и третьего параметра при реализации взаимосвязи в моделях

Более подробная информация здесь https://laravel.com/docs/8.x/eloquent-relationships#one-to-many

Комментарии:

1.Мои столы: Schema::create('folders', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->text('chapters'); $table->timestamps(); }); Schema::create('chapters', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->unsignedInteger('folder_id')->nullable(); $table->timestamps(); $table->foreign('folder_id')->references('id')->on('folders')->onDelete('cascade'); });