2017-12-08 40 views
0

配列の複数の画像をデータベースに保存しようとしていますが、苦労しています。私は、複数の画像をデータベースではないフォルダにアップロードすることができました。複数の画像をlaravelに保存する

私のコントローラ[保存各画像に$content->imageの値をオーバーライドしている

<div class="content-form"> 
    {{ Form::open(array('route' => 'content.store', 'method' => 'post','files'=>'true')) }} 
     {{ csrf_field() }} 

     <div class="form-group"> 
      <label for="title">Title</label> 
      <input type="text" id="title" class="form-control" name="title"> 
     </div> 

     <div class="form-group"> 
      <input type="file" name="image[]" multiple="multiple"> 
     </div> 

     <input type="submit" class="btn btn-primary" value="Submit"></input> 
    {{ Form::close() }} 
</div> 
+0

イメージの配列を後で取得するデータベースの最終的な構造は何ですか?たぶん画像のすべてのパスを ';' ? 今のところ、foreachがループした後に保存しているので、最後のイメージファイルの名前をデータベースに保存しています。 また、名前の代わりに完全なパスをイメージに保存することを検討することもできます。 – Lirianer

+0

私はおそらく ';'の後に配列を爆発させることを考えていました。 – user3095193

+0

この部分がありません.. enctype = "multipart/form-data" – ZeroOne

答えて

1

public function store(Request $request) 
{ 

    $content = new Content(); 

    $request->validate($this->getRules()); 

    $content->fill($this->getSafeInput($request)); 

    if($request->hasFile('image')) 
    { 
     foreach($request->file('image') as $image) 
     { 
      $destinationPath = 'content_images/'; 
      $filename = $image->getClientOriginalName(); 
      $image->move($destinationPath, $filename); 
      $content->image = $filename; 

     } 

    } 

    $content->save(); 

    return redirect()->route('content.index'); 
} 

マイフォームので、最終的にあなたの$content->image最後の画像の名前だけを持っています。

は、この操作を行います。ここでは

if($request->hasFile('image')) 
{ 
    $names = []; 
    foreach($request->file('image') as $image) 
    { 
     $destinationPath = 'content_images/'; 
     $filename = $image->getClientOriginalName(); 
     $image->move($destinationPath, $filename); 
     array_push($names, $filename);   

    } 
    $content->image = json_encode($names) 

} 

を画像の名前は、最初の配列に格納され、配列は後でjson形式でDBに保存されます。あなたは後でjson_decodeを実行してそれらにアクセスすることができます。あなたの名前の配列が戻ってくるでしょう!

0

';'で区切られた画像のルートを保存する場合は、あなたは、保存した画像へのパスのそれぞれと$allImages文字列を作成し、その後Contentモデルでそれをすべて保存する必要があり

public function store(Request $request) 
{ 

$content = new Content(); 

$request->validate($this->getRules()); 

$content->fill($this->getSafeInput($request)); 

$allImages = null; 

if($request->hasFile('image')) 
{ 
    foreach($request->file('image') as $image) 
    { 
     $destinationPath = 'content_images/'; 
     $filename = $image->getClientOriginalName(); 
     $image->move($destinationPath, $filename); 
     $fullPath = $destinationPath . $filename; 
     $allImages .= $allImages == null ? $fullPath : ';' . $fullPath; 
    } 

    $content->image = $allImages; 

} 

$content->save(); 

return redirect()->route('content.index'); 
} 

このような何かを行うことができます。

関連する問題