Rolavel 8とラーラーベル7でスプレッドシート(Excel)からデータをアップロードする方法


良い日、私は今日、私は何かに取り組んでいたので、私は、私はあなたの仲間のためにそれを皿にさせて、私はプロジェクト管理アプリに取り組んでいた、アプリは、ユーザーがプロジェクトを作成することができます、私はユーザーが別のセルを含むExcelシートをアップロードできるようになる機能を追加しました.アプリケーションは、セルの値を抽出し、データベース内のテーブルの列にある別のフィールドに追加します.
私は私たちのcrudアプリと同じように達成する方法についてご案内します、テクニックは、より大きな規模に拡張することができます、実際に私のアプリでは、それはとても複雑です、私は多くのセルを抽出することができますし、別のテーブルに追加することができますまた、さまざまなデータを持つデータの多くの行として.あなたが明確化を必要とする場合、またはエラーを発生している場合に私に手を伸ばす自由に感じる.
私のクリックより多くの更新プログラムを取得するに従ってください.
私の記事のように、あなたはrepoからフィニッシュコードを取得することができますし、また、私の前の記事から、最初のコードを得ることができます.

ステップ1:セットアップアプリ

  • gitクローンhttps://github.com/Kingsconsult/laravel_8_modal.git
  • cdララベルズ8モーテルモーダル/
  • 作曲家は、
  • をインストールします
  • NPMインストール
  • CP.環境変数例.ENV
  • PHPアルチザンキー:
  • を生成します
  • データベースの設定を追加します.ENVファイル(それを達成する方法に関する私の記事をチェックすることができます)
  • PHP職人は、
  • を移動します
  • PHPアルティザンサーブ(サーバーが開く場合は、http://127.0.0.1:8000、我々は行くには良いです)

  • http://127.0.0.1:8000/projectsに移動する

  • ステップ2:MattWebサイトをインストールする


    これは、我々のスプレッドシート、phpspreadsheetの周りのシンプルでエレガントなラッパーを使用する予定ですパッケージです.

    composer require maatwebsite/excel



    ステップ3 :プロバイダーでクラスを登録する(オプション)


    プロバイダーでプロバイダークラスを登録することができます.これはMataWeb/Excelが自動的に発見されるため、オプションです.
    config/appに移動します.PHPを追加し、

    Maatwebsite\Excel\ExcelServiceProvider::class,


    また、以下のエイリアスにファサードを加えます

    'Excel' => Maatwebsite\Excel\Facades\Excel::class,


    ステップ4 :設定を発行する


    php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"



    ステップ5 :インポートクラスを作成する


    php artisan make:import ProjectsImport --model=Models/Project



    インポートと呼ばれるフォルダは、app/にProjectSimportを含んで作成されます.PHP

    ステップ6 :インポートクラスを書く


    プロジェクトのポートを編集します.PHPとこの懸念をトップに追加します

    use Maatwebsite\Excel\Concerns\WithHeadingRow;


    これは、私たちの行の見出しを読んで、さまざまなセルを適切なテーブルの各フィールドに読んで、ProjectSimportクラスにも実装します
    <?php
    
    namespace App\Imports;
    
    use App\Models\Project;
    use Maatwebsite\Excel\Concerns\ToModel;
    use Maatwebsite\Excel\Concerns\WithHeadingRow;
    
    
    class ProjectsImport implements ToModel, WithHeadingRow
    {
        /**
         * @param array $row
         *
         * @return \Illuminate\Database\Eloquent\Model|null
         */
        public function model(array $row)
        {
            return new Project([
                'name'     => $row['name'],
                'introduction'    => $row['introduction'],
                'location'    => $row['location'],
                'cost'    => $row['cost']
            ]);
        }
    }
    

    ステップ7 :ルートを作成する


    ルート/Web/フォルダのWebルートファイルに移動し、次のコードを追加し、リソースルートの前にあなたのポストルートを記述することを確認します.
    <?php
    
    use Illuminate\Support\Facades\Route;
    use App\Http\Controllers\ProjectController;
    
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
    
    Route::get('/', function () {
        return view('welcome');
    });
    
    
    Route::post('projects/importProject', [ProjectController::class, 'importProject'])->name('importProject');
    
    Route::resource('projects', ProjectController::class);
    
    

    ステップ8 :コントローラのメソッドを作成する


    私たちのルートでは、URIが「プロジェクト/importプロジェクト」であり、コントローラメソッドが' import project 'であるポストルートを作成しました.私はいつも参照のために私のルート名を与え、またフロントエンドのコードを短縮する.
    そこで、私たちのルートに、「import project」と呼ばれるプロジェクトコントローラにメソッドがあることを伝えました.
    名前空間の後、コントローラの上部のクラスを呼び出します

    これは、ProjectControllerの現在のメソッドです

    ステップ9 :インデックスを変更します。ブレード.ファイルアップロードを受け入れるPHPファイル



    ファイルタイプと名前ファイルを持つ入力タグを含んでいるフォームを追加しました.また、submitボタンを押すと、form typeに“multipart/form data”を追加することを忘れないでください.

    ステップ10 :スプレッドシートを作成する


    私たちは、異なる2つの(2)シートを含むスプレッドシートを作成するつもりです.
    ファーストシート

    二枚目

    それは、我々が必要とするすべてです
    http://127.0.0.1:8000/projectsに行く

    ファイルの選択

    CRUDシートというファイル.xlsxが選択されました

    ボタンをクリックする

    あなたは1と2は我々のスプレッドシートに入力されたプロジェクトであり、プロジェクトの成功した作成の通知があることがわかります.
    repoから完全なコードを得ることができます.
    私の記事の詳細については、コメント、提案や反応を残すことができます
    私の他のポスト