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 - 将多个数组作为新行插入?

【PHP】laravel怎么获取网址里面的参数

【PHP】laravel怎么获取网址里面的参数

如何在 laravel 5 中插入和更新图像 Summernote

Laravel - 在数据库中保存或插入图像数组 - Laravel

Laravel 5 Eloquent - 将计算值作为列添加到集合