通过索引 Laravel 5 从集合中获取项目
Posted
技术标签:
【中文标题】通过索引 Laravel 5 从集合中获取项目【英文标题】:Get item from collection by index 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
是什么或者如何用集合填充它?
输入类型文件。还有什么?
产品和图像之间有什么关系?您使用数组键获得产品的图像,这是不正确的。
产品有很多图片,图片属于产品
【参考方案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->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
您还可以在更新方法中从服务器中删除旧图像。
【讨论】:
以上是关于通过索引 Laravel 5 从集合中获取项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重新索引的情况下将项目添加到 laravel 列表集合中?