2017-05-10 5 views
0

maatwebsiteのExcelを使用してExcelファイルをデータベースにインポートしています。現在、Laravelフレームワークを使用しています。同じExcelファイルの後の行を変更して更新することができます。そして、同じ更新ファイルをインポートする必要があります。アプリケーションは、変更された各行を認識し、自動的に更新する必要があります。データベースに格納されます。それは可能ですか?「更新された行」を含む同じExcelファイルをデータベースにインポート

私の実際のコードは、あなたがlaravelにfirstorNew()機能を試すことができ、ここで

public function store(Request $request) 
{ 

    // Excel::load(Input::file('archivo'), function($reader) { 
    // Getting all results 
    if($request->hasFile('archivo')){ 

    $archivo = $request->file('archivo'); 
    $nombre_original = $archivo->getClientOriginalName(); 
    $extension = $archivo->getClientOriginalExtension(); 
    // dd($nombre_original); 
    // $reader->dd(); 

     $datosimportacion = New Importacion(); 
     $datosimportacion->nombre_documento = $nombre_original; 
     $datosimportacion->responsable = Auth::user()->name; 
     $datosimportacion->save(); 



     Excel::selectSheetsByIndex(0)->load($archivo, function($hoja) { 

      // $hoja->each(function($fila) { 
       foreach($hoja->toArray() as $fila) 
       { 
        Inventario::create($fila); 

        } 

     });   
     Session::flash('success', 'El archivo se proceso exitosamente.'); 
     return redirect()->route('importaciones.index'); 

    }else{ 

     Session::flash('error', 'El archivo no se subio exitosamente.'); 
     return redirect()->route('importaciones.index'); 
    }    


} 

答えて

0

です。基本的には、データが存在しない場合はインスタンス化し、それ以外の場合は現在のデータを更新します。

https://laravel.com/docs/5.4/eloquent

+0

の詳細情報検索firstOrCreate/firstOrNewため

$datosimportacion = Importacion::firstorNew(['foo'=>'bar']); //you can pass your array of your row or unique key of your row $datosimportacion->nombre_documento = $nombre_original; $datosimportacion->responsable = Auth::user()->name; $datosimportacion->save(); 

私はそれが動作しないでしょうね。ポイントは、Excelを変更し、db内の同じレコードを変更することです。しかし、firstOrNewはExcelの行の変更に関する新しいレコードを作成します。 Excelで新しい行を追加し、以前の行を変更しない場合にのみ機能します。 – Ankit

+0

ありがとうございます。$ datosimportacionは、アップロードされたファイル、日付、ユーザーに関する情報のみを保存する別のテーブルです。私は必要なものは、データベースのレコードがdatabseに存在する場合は、ユニークなIDに基づいてデータベース内のものとアップロードされた新しいExcelレコードを比較しようとしているため、inventarioテーブルに移動する必要がありますアップロードされたファイル(各列を比較するよりも簡単です)の問題は、新しいファイルがデータベース上のレコードよりも多くの行を持つ場合です。このような状況では、どうすれば –

+0

を追加できますか?動的な列がある場合は、JSONをデータベースに格納すると言うので、気にする必要はありませんが、jsonを解析して毎回比較する必要があるかもしれません。 –

関連する問題