Laravel 5:将图像网址作为数组插入列
Posted
技术标签:
【中文标题】Laravel 5:将图像网址作为数组插入列【英文标题】:Laravel 5: Insert image urls into column as array 【发布时间】:2016-11-28 05:59:43 【问题描述】:我正在使用 Laravel 5 构建一个应用程序,我想在以逗号分隔的数组中插入多个图像 url。这将被放置在数据库的列中。这些文件已成功上传到我的 AWS S3 存储桶,但它现在是数据库的输入。我尝试使用 Laravel 的 array_add 帮助程序,但我收到一个错误,指出我缺少参数 2。我想知道如何才能实现这一点。我当前的替代解决方案是将图像与帖子 ID 放在一起,并使用关系将它们连接在一起。
供参考:我打算放置图像的列是 picgallery,插入是使用 $newproperty['picgallery'] 变量完成的。
public function store(Request $request)
//establish random generated string for gallery_id
$rando = str_random(8);
//input all data to database
$data = $request->all();
$newproperty['title'] = $data['title'];
$newproperty['address'] = $data['address'];
$newproperty['city'] = $data['city'];
$newproperty['province'] = $data['province'];
$newproperty['contact_person'] = Auth::user()->id;
$newproperty['gallery_id'] = $rando;
$newproperty['property_description'] = $data['description'];
if($request->hasfile('images'))
$files = $request->file('images');
//storage into AWS
foreach ($files as $file)
$uploadedFile = $file;
$upFileName = time() . '.' . $uploadedFile->getClientOriginalName();
$filename = strtolower($upFileName);
$s3 = \Storage::disk('s3');
$filePath = 'properties/' . $rando . '/' . $filename;
$s3->put($filePath, file_get_contents($uploadedFile), 'public');
$propicurl = 'https://s3-ap-southeast-1.amazonaws.com/cebuproperties/' . $filePath;
$array = array_add(['img'=> '$propicurl']);
$newproperty['picgallery'] = $array;
Properties::create($newproperty);
return redirect('/properties');
【问题讨论】:
【参考方案1】:array_add 需要 3 个参数
$array = array_add($array, 'key', 'value'); (https://laravel.com/docs/5.1/helpers#method-array-add)
例如
$testArray = array('key1' => 'value1');
$testArray = array_add($testArray, 'key2', 'value2');
你会得到
[
"key1" => "value1",
"key2" => "value2",
]
在这种情况下,您可能无法使用 array_add。
我认为为了解决您的问题,请将您的 foreach 循环修复为这样
//storage into AWS
// init the new array here
$array = [];
foreach ($files as $file)
$uploadedFile = $file;
$upFileName = time() . '.' . $uploadedFile->getClientOriginalName();
$filename = strtolower($upFileName);
$s3 = \Storage::disk('s3');
$filePath = 'properties/' . $rando . '/' . $filename;
$s3->put($filePath, file_get_contents($uploadedFile), 'public');
$propicurl = 'https://s3-ap-southeast-1.amazonaws.com/cebuproperties/' . $filePath;
// change how to use array_add
array_push($array, array('img' => $propicurl));
// remove the below line
// $array = array_add($array, 'img', $propicurl);
// move this assignment out of foreach loop
$newproperty['picgallery'] = $array;
【讨论】:
刚刚试过这个。得到一个未定义的变量:数组错误。 您需要在 foreach 循环 $array = [];请检查答案上的最新代码 再想想这个。我们在同一个数组中插入了一个重复的键,这意味着,最后,你将得到一个只有 1 个元素的数组。我认为我们可以使用 array_push 来代替。我会更新我的答案以上是关于Laravel 5:将图像网址作为数组插入列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 5 中插入和更新图像 Summernote