Laravel - сохранение или вставка массива изображений в базу данных - Laravel - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу сохранить свои изображения в базе данных mysql, в которой я использую массив, но я могу что-то вставить, но это не изображение, это пустое изображение. вот мой код для просмотра

P.S у меня есть ajax, поэтому он имеет идентификатор

Вот мой ВИД

  {!! Form::open(['action'=>'Admin\PromotionsController@store', 'method' => 'POST','enctype'=>'multipart/form-data']) !!}
<div class="form-group">  
     <form name="add_name" id="add_name">  
          <div class="table-responsive">  
               <table class="table table-bordered" id="dynamic_field">  
                    <tr>  
                         <td> {{Form::file('promotion_image[]')}}</td>

                         <td>{{ Form::button('Add', ['class' => 'btn btn-success', 'id'=>'add','name'=>'add']) }}</td>
                    </tr>  
               </table>  
               {{Form::submit('submit', ['class'=>'btn btn-primary'])}}
          </div>  
     </form>  
</div>  
{!! Form::close() !!}

Вот мой контроллер, который будет хранить или сохранять изображения

 $this->validate($request, [
        'promotion_image' => 'required'
    ]);

   //Handle File Upload
   if($request->hasFile('promotion_image[]')){
    // Get FileName
    $filenameWithExt = $request->file('promotion_image[]')->getClientOriginalName();
    //Get just filename
    $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
    //Get just extension
    $extension = $request->file('promotion_image[]')->getClientOriginalExtension();
    //Filename to Store
    $fileNameToStore = $filename.'_'.time().'.'.$extension;
    //Upload Image
    $path = $request->file('promotion_image[]')->storeAs('public/promotion_images',$fileNameToStore);
    }else{
        $fileNameToStore='noimage.jpg';
    }

    $promotion = new Promotion;
    $promotion->promotion_image = $fileNameToStore;
    $promotion->save();

Мой код AJAX

<script>  
$(document).ready(function(){  
     var i=1;  
     $('#add').click(function(){  
          i++;  
          $('#dynamic_field').append('<tr id="row'+i+'"><td>{{Form::file('promotion_image[]',['class'=>'form-control name_list'])}}</td><td><button type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td></tr>');  
     });  
     $(document).on('click', '.btn_remove', function(){  
          var button_id = $(this).attr("id");   
          $('#row'+button_id+'').remove();  
     });  
     $('#submit').click(function(){            
          $.ajax({  
               url:"name.php",  
               method:"POST",  
               data:$('#add_name').serialize(),  
               success:function(data)  
               {  
                    alert(data);  
                    $('#add_name')[0].reset();  
               }  
          });  
     });  
});  
</script>

1 Ответ

0 голосов
/ 19 ноября 2018
$('#add_name').serialize() using this you can't get image object in post using ajax.

Вы должны использовать formdata

var form = $('form')[0];
var formData = new FormData(form);

передать данные формы как данные в вашем вызове ajax

Изменения ниже

Ваш взгляд

{!! Form::open(['action'=>'Admin\PromotionsController@store', 'method' => 'POST','enctype'=>'multipart/form-data', 'name' => 'add_name', 'id' => 'add_name']) !!}
<div class="form-group">   
    <div class="table-responsive">  
        <table class="table table-bordered" id="dynamic_field">  
           <tr>  
              <td> {{Form::file('promotion_image[]')}}</td>

              <td>{{ Form::button('Add', ['class' => 'btn btn-success', 'id'=>'add','name'=>'add']) }}</td>
           </tr>  
        </table>  
        {{Form::submit('submit', ['class'=>'btn btn-primary'])}}
    </div> 
</div>  
{!! Form::close() !!}

Для функции контроллера вы должны использовать foreach

Если вы используете последнюю версию Laravel

$this->validate($request, [
    'promotion_image' => 'required'
]);

if ($request->has('promotion_image'))
{
    $promotion_images = [];
    foreach ($request->file('promotion_image') as $key => $file)
    {
        $image = \Storage::put('promotion_image', $file); // your image path

        if ($image)
            array_push($promotion_images, $image);
    }

    $fileNameToStore = serialize($promotion_images);

}
else
{
    $fileNameToStore='noimage.jpg';
}
$promotion = new Promotion;
$promotion->promotion_image = $fileNameToStore;
$promotion->save();

Или, согласно вашей логике

$this->validate($request, [
    'promotion_image' => 'required'
]);

if ($request->has('promotion_image'))
{   
    //Handle File Upload

    $promotion_images = [];
    foreach ($request->file('promotion_image') as $key => $file)
    {
        // Get FileName
        $filenameWithExt = $file->getClientOriginalName();
        //Get just filename
        $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
        //Get just extension
        $extension = $file->getClientOriginalExtension();
        //Filename to Store
        $fileNameToStore = $filename.'_'.time().'.'.$extension;
        //Upload Image
        $path = $file->storeAs('public/promotion_images',$fileNameToStore);
        array_push($promotion_images, $fileNameToStore);
    }

    $fileNameToStore = serialize($promotion_images);
}
else
{
    $fileNameToStore='noimage.jpg';
}

$promotion = new Promotion;
$promotion->promotion_image = $fileNameToStore;
$promotion->save();

И измените код вашего скрипта ajax

Изменение в способе отправки

$('#submit').click(function(){  
        var form = $('#add_name')[0];
        var formData = new FormData(form);

          $.ajax({  
               url:"name.php",  
               method:"POST",  
               data:formData,  
               success:function(data)  
               {  
                    alert(data);  
                    $('#add_name')[0].reset();  
               }  
          });  
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...