用这个扩展包的编辑场景有什么好的解决方式么?

编辑场景下,前端调用的是图片url,然后比如删除了几张图片,又添加了几张图片,这种场景下怎么写相应的逻辑比较好?
以下是目前我所写的流程,感觉比较丑,@liyu001989 老师能否说下有没有更好的解决办法?

public function update(Request $request, User $user)
{
    $user->update($request->post());
    $user->getMedia('photos')->each(function ($item) {
        $item->setCustomProperty('is_delete', true);
        $item->save();
    });
    collect($request->post('photos'))->each(function ($item) use ($user) {
        if (isset($item['path'])) {
            // 如果有path属性,说明是新上传的文件
            $user->addMedia(Storage::path($item['path']))->toMediaCollection('photos');
        }else{
            // 否则是已经上传的文件
            $user->addMediaFromUrl($item['url'])->toMediaCollection('photos');
        }
    });
     $user->clearMediaCollectionExcept('photos',$user->getMedia('photos',['custom_properties.is_delete' !== true]));
     $user->save();

     return $this->created()
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
liyu001989

你这是跟 更新的接口,最后返回了 created? 不返回数据?

更新了用户信息,然后删了已有的media,然后添加新的media? 你是不是应该考虑分开更新,用户资源 和 media 资源接口分开

5年前 评论

api状态码,更新和创建都应该返回201吧?这个是自定义的方法返回201的,我写的是有返回数据的,只是在这里示例的时候没有写。
即使分开的话,编辑场景下,已有的图片提交的只是一个url,而新传的图片提交的是上传成功后返回的文件路径,不知道该怎么处理合适,分开以后,media接口更新时提供一个关联模型id,然后处理方式还是一样啊,只是想知道编辑场景下,比如编辑一篇文章,文章关联了10张图片,然后删除了5张,又新增了3张这种情况,流程怎么写比较好一点?

5年前 评论

又想了下问题所在,因为我是先上传的图片,然后再创建 user ,直接调用media接口上传,貌似无法指定关联模型?

5年前 评论
forever123 4年前

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