Laravel-admin form 一对多关系
根据laravel-admin官方文档对于form一对多的写法如下:
例如我有两个模型,一个项目模型Project和一个项目详情模型ProjectDetail
Project模型:
class Project extends Model
{
public function details()
{
return $this->hasMany(ProjectDetail::class,'id','project_id');
}
}
ProjectDetail模型:
class ProjectDetail extends Model
{
protected $table = 'project_details';
protected $fillable = ['type', 'project_id', 'content','created_at','updated_at','remark'];
protected $casts = [
'content' => 'json',
];
public function porject()
{
return $this->belongsTo(Project::class, 'project_id','id');
}
}
模型定义完毕以后在projectsController控制器中写入:
$form->hasMany('details','详情内容', function (Form\NestedForm $form) {
$form->select('type','类型')->options([0 => '基本信息',1 => '销售信息',2 => '小区概况']);
$form->text('name','名称');
//list方法为form表单组件中存入一维json数组的组件方法
$form->list('content','内容');
});
由此基本工作准备完毕,但是当提交数据的时候遇到两个问题:
- 通过projectsController进行数据保存,无法在关联的模型(ProjectDetail)中保存json数据(上面代码中的$form->list(‘content’,’内容’););
- 关联模型(ProjectDetail)中关联的字段project_id提交数据的时候无法进行更新。
一些解决思路:
- 无法保存,先用保存回调获取一下details的数据:
最后打印的结果中没有json一维数组,不可行;//保存后回调 $form->saving(function (Form $form) { //... dd($form->details); });
- 在模型中定义boot方法进行,获取到的数据和保存回调依然一致,也不可行;
所以在此求教各位有没有什么方式能够达成以上的需求——也就是一对多模型关联,能够更新/插入关联字段(project_id),并且能够插入json一维数组!
推荐文章: