2016-07-25 8 views
2

Ich arbeite eine Anwendung mit Laravel 5, wo ich mehrere Bild-URLs innerhalb eines Arrays durch Kommata getrennt einfügen möchte. Dies würde in einer Spalte in der Datenbank platziert werden. Die Dateien wurden erfolgreich in meinen AWS S3-Bucket hochgeladen, aber jetzt ist es die Eingabe in die Datenbank. Ich habe versucht, Laravel array_add Helfer zu verwenden, aber ich bekomme einen Fehler, der besagt, dass ich Argument 2 vermisse. Ich frage mich, wie ich das erreichen könnte. Meine aktuelle alternative Lösung besteht darin, die Bilder mit der Post-ID zu versehen und die Beziehung zu verwenden, um sie miteinander zu verbinden.Laravel 5: Bild-URLs als Array in die Spalte einfügen

Als Referenz: Die Spalte, die ich beabsichtige, die Bilder zu platzieren, ist Picgallery, und die Einfügung erfolgt mit $ newproperty ['Picgallery'] Variable.

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

Antwort

0

array_add erfordert 3 Parameter

$ array = array_add ($ array, 'Schlüssel', 'Wert'); (https://laravel.com/docs/5.1/helpers#method-array-add)

Zum Beispiel

$testArray = array('key1' => 'value1'); 
$testArray = array_add($testArray, 'key2', 'value2'); 

und Sie werden

[ 
    "key1" => "value1", 
    "key2" => "value2", 
] 

Sie in der Lage zu verwenden array_add könnten in diesem Fall nicht bekommen.

denke ich, um das Problem zu beheben, reparieren Ihre foreach-Schleife so etwas wie diese

//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; 
+0

gerade versucht zu sein. Hat eine undefinierte Variable: array error. –

+0

Sie müssen ein Array initialisieren auf foreach Schleife setzen $ array = []; Bitte überprüfen Sie den neuesten Code auf die Antwort – gie3d

+0

Kommen Sie wieder daran zu denken. Wir haben einen doppelten Schlüssel in dasselbe Array eingefügt, was bedeutet, dass Sie am Ende ein Array mit nur einem Element erhalten. Ich denke, wir könnten stattdessen array_push verwenden. Ich werde meine Antwort aktualisieren – gie3d