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','内容');
});

由此基本工作准备完毕,但是当提交数据的时候遇到两个问题:

  1. 通过projectsController进行数据保存,无法在关联的模型(ProjectDetail)中保存json数据(上面代码中的$form->list(‘content’,’内容’););
  2. 关联模型(ProjectDetail)中关联的字段project_id提交数据的时候无法进行更新。

一些解决思路:

  1. 无法保存,先用保存回调获取一下details的数据:
    //保存后回调
    $form->saving(function (Form $form) {
    //...
     dd($form->details);
    });
    最后打印的结果中没有json一维数组,不可行;
  2. 在模型中定义boot方法进行,获取到的数据和保存回调依然一致,也不可行;

所以在此求教各位有没有什么方式能够达成以上的需求——也就是一对多模型关联,能够更新/插入关联字段(project_id),并且能够插入json一维数组!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

1,project_id 可以用 $form->hidden('project_id')->value($project_id);放到表单隐藏提交就可以了。或者在保存前的回调里面给 $form定义一个project_id的属性。

2,至于你说的不能保存JSON的那个不是很明白你说的什么意思。laravel 有提供修改器,可以了解一下。修改器《Laravel 5.8 中文文档》

4年前 评论

@Stone007 感谢百忙之中回复,我模型关联那里外键写反了,改正以后就可以更新了!修改器这个我再研究一下,再次感谢!

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!