php - 此集合实例上不存在 Laravel 属性 [文件名]
问题描述
当我编辑产品时,我也在尝试编辑多个图像,所以如果我上传新图像,旧图像应该被新图像替换,但现在如果我上传图像我收到错误Property [filename] does not exist on this collection instance."
并且旧图像不会被删除但新图像已添加。有相关的 products 和 ProductsPhoto 表,在 ProductsPhoto 表中有一个 filename 列和 product_id 列。编辑产品时如何用新图像替换旧图像?
我的代码。
刀片模板
<input multiple="multiple" name="photos[]" type="file">
控制器
public function update(Request $request)
{
$product = Product::with('ProductsPhoto')->find($request->product_id,'id');
if ($request->hasFile('photos')){
//Add the new photo
foreach ($request->photos as $photo) {
$filename = $photo->store('public/photos');
ProductsPhoto::create([
'product_id' => $product->id,
'filename' => $filename
]);
}
$oldFilename = $product->ProductsPhoto->filename;
//Update the database
$product->ProductsPhoto->filename = $filename;
//Delete old photo
Storage::delete($oldFilename);
}
$product->save();
}
解决方案
似乎一个产品有很多 productsPhoto,所以$product->ProductsPhoto
是一个集合,而不是一张照片!
我不知道您的实体是如何定义的,尤其是Product和ProductPhoto类:但是您应该删除productsPhoto的旧集合
$product->productsPhoto()->delete();
并保存新的:
$newPhotos=[];
foreach ($request->photos as $photo) {
$filename = $photo->store('public/photos');
$newPhotos[] = new ProductsPhoto(['filename'=>$filename]);
}
$product->productsPhoto()->saveMany($newPhotos);
而不是尝试替换文件名
推荐阅读
- python - 熊猫数据操作
- javascript - 如果没有用户对第一反应做出反应,Discord.js 反应收集器将失败。无法读取未定义的属性“计数”
- excel - 将 x 天数添加到开始日期但不包括假期?
- performance-testing - Jmeter 持续时间超出虽然是固定的
- elasticsearch - Elasticsearch 提升嵌套字段分数相关性查询
- android-studio - 警告“数据类”和“类”定义中的“缺少换行符”(kotlin 1.4.M1)
- css - 调整大小时如何使div坚持其位置?
- java - 无法在 Java 中获取特定索引中的对象
- python - python元组删除nan
- google-bigquery - 如何在 BigQuery 中将表从伦敦的数据集滚动移动到欧盟?