Laravel9 update方法图片上传报storeAs() on string错误
错误原因
Call to a member function storeAs() on string报错是因为更新场景下,你不会每次都重新上传全部6张图片:对应字段没有新上传文件时,$this->{$image}取到的是模型里已存的字符串类型图片路径,不是UploadedFile文件实例,自然无法调用storeAs()方法。
create方法能正常运行,是因为新建记录时所有图片字段都是新提交的文件实例,不存在旧值为字符串的情况。
修复方法
调整循环逻辑,仅当对应字段值为有效上传文件时,才执行文件存储、覆盖对应字段值;没有新上传文件时,不把该字段写入更新数据数组,就不会覆盖数据库里原有的图片路径。修改后的循环代码如下:
foreach ($images as $image) { // 判断当前字段是否为有效上传文件 if ($this->{$image} instanceof \Illuminate\Http\UploadedFile) { $data[$image] = $this->{$image}->storeAs( $this->evaluation->id, // 这里直接取前面查询出的$tentry->id,避免上下文属性取值偏差 $this->trial->id . '_' . $tentry->id . '_' . $image . '_' . Carbon::now()->toDateString() . '.' . $this->{$image}->getClientOriginalExtension(), 'trial-entry-photos' ); } }
额外注意
请确认编辑表单已经添加enctype="multipart/form-data"属性,否则文件无法正常提交。
内容的提问来源于stack exchange,提问作者Charles Smith
相关产品推荐
相关产品推荐

