#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'); });