通过索引Laravel 5获取项目

时间:2017-01-13 06:26:46

标签: php arrays laravel collections

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

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

4 个答案:

答案 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;

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