2017-01-13 121 views
0

我需要将多个图像上传到服务器。如果图像存在于数据库更新名称中,请上传新的。否则在数据库中创建新记录。 脚本我上传了新图片,但没有更新现有图片。从索引中获取项目Laravel 5

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

你也应该显示你的输入表单,这样我们就可以了解什么类型的请求要进入 –

+0

'$ product'或者如何用集合填充它? –

+0

输入类型文件。还有什么? –

回答

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]); 
     } 
    } 

来完成请并不是说我认为$键是ID iamges意味着你输入应该被命名为这样

<imput name="images['Id_of_image_in_databse']" type="file" /> 
+0

从哪里我会得到id? –

+0

那为什么我首先要求你提供你的代码表格 –

2

使用updateOrCreate()方法来代替整个if ... else子句:

$product->images->updateOrCreate(['id' => $key], ['name' => $filename]); 
+2

upvote for updateOrCreate()'暗示...... –

+0

是输入文件的索引,而不是id –

+0

键是输入的数目,如果使用了第二个输入 - 更新第二个图像在db –

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; 

这是不能不回答的一部分!所以让我知道上面代码的结果。

1

您还可以使用wonderfull收集方法laravel必须检查集合是否包含特定项目/项。请查看https://laravel.com/docs/5.3/collections#method-get以从集合中检索按键的项目。如果该项目不存在,则返回null。您可以进行如下检查:

if(null !== $product->images()->get($key)){ 
    // update 
    // remove old image 
} else { 
    // create 
} 

当您处于更新方法中时,也可以从服务器上删除旧映像。

相关问题