【问题标题】:Get item from collection by index Laravel 5通过索引 Laravel 5 从集合中获取项目
【发布时间】:2017-05-28 11:17:33
【问题描述】:

我需要将多张图片上传到服务器。如果数据库更新名称中存在图像,则上传新的。否则在数据库中创建新记录。 脚本我已上传新图片但不更新现有图片。

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

【问题讨论】:

  • 您也应该显示您的输入表单,以便我们了解即将到来的请求类型
  • $product 是什么或者如何用集合填充它?
  • 输入类型文件。还有什么?
  • 产品和图像之间有什么关系?您使用数组键获得产品的图像,这是不正确的。
  • 产品有很多图片,图片属于产品

标签: php arrays laravel collections


【解决方案1】:

应该是这样的

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" />

【讨论】:

  • 这就是为什么我首先要求您提供表单代码
【解决方案2】:

使用updateOrCreate() 方法而不是整个if ... else 子句:

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

【讨论】:

  • 是输入文件的索引,不是id
  • 键是输入的数量,如果使用了第二个输入 - 更新数据库中的第二个图像
  • @NgoliChiganu 在您的代码中,您将$key 用作id。如果不是身份证,身份证是什么?如果你没有,你想知道这个文件是否已经存在于数据库中?
  • 你傻吗??我告诉过你 $key 是输入索引,我可以使用 $product->images[$key] 获取图像,但它拒绝更新它。
  • @NgoliChiganu 我认为你甚至不知道基本的编码,你正在使用 laravel 并说某人很愚蠢,而你很愚蠢,不知道如何管理一个简单的表单
【解决方案3】:

首先你需要确定代码结果,将下面的代码放在if ($request-&gt;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;

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

【讨论】:

    【解决方案4】:

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

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

    您还可以在更新方法中从服务器中删除旧图像。

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2018-09-11
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多