Laravel Backpack - 内联创建,未在数据库中添加关系
Posted
技术标签:
【中文标题】Laravel Backpack - 内联创建,未在数据库中添加关系【英文标题】:Laravel Backpack - Inline create, relationship not being added on DB 【发布时间】:2021-06-20 02:42:53 【问题描述】:我正在尝试 4.1 新功能“内联创建”,但我似乎无法关联所创建项目的 ID。让我解释一下我在做什么/我想要什么:
我有“文件夹”,里面有“章节”(所以 1-n 关系)。
我的代码:
CRUD::addField([ //Folder crud
'name' => 'chapters',
'type' => 'relationship',
'label' => 'Unidad',
'model' => "App\Models\Chapter",
'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);
它创建主要项目和相关项目没有问题,但它实际上并没有在任何时候将它们关联到数据库中。
任何线索我可能做错了什么?遵循文档,但似乎无法使其工作。
谢谢。
【问题讨论】:
成功了吗?基本上,我有同样的问题。不过有趣的是,当您尝试从子代内联创建父代时,它会起作用。在这种情况下,如果您从chapter
内部创建 folder
它可以工作,但是当您尝试从 folder
创建 chapter
时,它会永远挂起。
【参考方案1】:
你在 db 中有正确的列名吗?使关系成为可能的列,即在文件夹表中,您应该有一个名为 chapter_name 或 chapter_id 的列,以标识文件夹所属的章节。
此外,如果这些列不遵循 laravel 约定,则需要在模型中实现关系时将它们添加为第二个和第三个参数
更多详情在这里https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
【讨论】:
我的表: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'); );
以上是关于Laravel Backpack - 内联创建,未在数据库中添加关系的主要内容,如果未能解决你的问题,请参考以下文章
设置中的 Laravel-Backpack/Settings 表字段
在 MyAccountController [backpack-laravel] 中添加个人资料信息
Laravel 5.4 Backpack 无法删除项目,返回“403 Forbidden”错误
Laravel-Backpack:结合 hasMany 和 hasManyThrough 在列表中添加子句
Laravel Backpack - 在 PageTemplate 中上传多个
Laravel 6 Backpack 4.0:如何在 FormRequest 类中获取当前页面 ID,或者我可以在不使用 FormRequest 类的情况下获得吗?