我需要将多个图像上传到服务器。如果图像存在于数据库更新名称中,则上载新的。否则在数据库中创建新记录。 脚本我上传了新图片,但没有更新现有图片。
if ($request->hasFile('images')) {
foreach ($request->file('images') as $key => $image) {
$filename = time() . $image->getClientOriginalName();
$image->move('img/products', $filename);
if (isset($product->images[$key])) {
$result = $product->images[$key]->update([
'name' => $filename
]);
dd($result);
} else {
$product->images()->create([
'name' => $filename
]);
}
}
}
答案 0 :(得分:2)
使用updateOrCreate()
方法代替整个if ... else
子句:
$product->images->updateOrCreate(['id' => $key], ['name' => $filename]);
答案 1 :(得分:2)
您还可以使用laravel的精彩收集方法来检查集合是否包含特定的项目/密钥。请查看https://laravel.com/docs/5.3/collections#method-get以从集合中按键检索项目。如果该项不存在,则返回null。你可以检查一下像
if(null !== $product->images()->get($key)){
// update
// remove old image
} else {
// create
}
当您使用更新方法时,也可以从服务器中删除旧图像。
答案 2 :(得分:0)
应该这样做
if ($request->hasFile('images')) {
foreach ($request->file('images') as $key => $image) {
$filename = time() . $image->getClientOriginalName();
$image->move('img/products', $filename);
$product->images->updateOrCreate(['id' => $key], ['name' => $filename]);
}
}
请注意,我认为$ key是id iamges意味着你的输入应该像这样命名
<imput name="images['Id_of_image_in_databse']" type="file" />
答案 3 :(得分:0)
首先,您需要确保代码结果,放在if ($request->hasFile('images')) {
行之前的代码下面
print('<pre style="color:red;">Uploaded image:: ');
print_r($request->file('images'));
print('</pre>');
print('<pre style="color:red;"> Product Image:: ');
print_r($product->images);
print('</pre>');
exit;
这不是答案的一部分!所以让我知道上面代码的结果。