このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
プログラム言語:php:laravel:csvアップロード [2021/01/25 17:00] humolife 作成 |
プログラム言語:php:laravel:csvアップロード [2021/01/25 17:31] (現在) humolife |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== 【Laravel】CSVアップロード ====== | + | ====== 【Laravel】CSVアップロード(インポート) |
| - | CSVファイルアップロード時に、バリデーションチェックを行い、DBに登録する方法の一例。 | + | CSVファイルをアップロードし、バリデーションチェック&DBに登録する方法の一例。 |
| ===== config\site\csv.php ===== | ===== config\site\csv.php ===== | ||
| コンフィグファイルに、csv の列に対応した DB カラム名の関連付けを定義する。 | コンフィグファイルに、csv の列に対応した DB カラム名の関連付けを定義する。 | ||
| 行 107: | 行 107: | ||
| </ | </ | ||
| ===== app\Http\Controllers\SampleController.php ===== | ===== app\Http\Controllers\SampleController.php ===== | ||
| - | 以下、記事まとめ途中 | + | ajax の場合の例。\\ |
| + | 普通の POST 送信の場合は「return response()-> | ||
| < | < | ||
| + | <?php | ||
| + | |||
| + | namespace App\Http\Controllers; | ||
| + | |||
| + | use App\Http\Controllers\Controller; | ||
| + | use Illuminate\Support\Facades\Validator; | ||
| + | |||
| + | use DB; | ||
| + | |||
| + | # models | ||
| + | use App\Models\Sample; | ||
| + | |||
| + | # requests | ||
| + | use App\Http\Requests\Admin\SampleRequest; | ||
| + | |||
| + | # libs | ||
| + | use App\Libs\SampleCsv; | ||
| + | |||
| + | class SampleController extends Controller | ||
| + | { | ||
| + | public function store(SampleRequest $request) | ||
| + | { | ||
| + | $sample_csv = new SampleCsv($request-> | ||
| + | $csv_data = $sample_csv-> | ||
| + | |||
| + | $csv_errors = []; // エラーメッセージを格納 | ||
| + | $number_count = []; // number の重複チェック用 | ||
| + | |||
| + | foreach ($csv_data as $key => $val) { | ||
| + | $validator = Validator:: | ||
| + | $val, | ||
| + | $sample_csv-> | ||
| + | $sample_csv-> | ||
| + | $sample_csv-> | ||
| + | ); | ||
| + | |||
| + | if ($validator-> | ||
| + | $csv_errors[$key] = $validator-> | ||
| + | } | ||
| + | |||
| + | $number = $val[' | ||
| + | |||
| + | $number_count[$number] = isset($number_count[$number]) | ||
| + | ? $number_count[$number] + 1 | ||
| + | : 1; | ||
| + | |||
| + | $sample = Sample:: | ||
| + | -> | ||
| + | |||
| + | if (!is_null($sample)) { | ||
| + | $csv_errors[$key][] = $number . ' は登録済みのNoです。'; | ||
| + | |||
| + | } elseif ($number_count[$number] > 1) { | ||
| + | $csv_errors[$key][] = 'No ' . $number . ' はcsvファイル内で重複しています。'; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if (count($csv_errors) > 0) { | ||
| + | $response = []; | ||
| + | $response[' | ||
| + | $response[' | ||
| + | return response()-> | ||
| + | } | ||
| + | |||
| + | try { | ||
| + | DB:: | ||
| + | |||
| + | Sample:: | ||
| + | |||
| + | foreach ($csv_data as $val) { | ||
| + | $sample = new Sample(); | ||
| + | $sample-> | ||
| + | $sample-> | ||
| + | } | ||
| + | |||
| + | } catch (\Exception $e) { | ||
| + | $log_message = var_export([ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], true); | ||
| + | \Log:: | ||
| + | |||
| + | return response()-> | ||
| + | } | ||
| + | |||
| + | DB:: | ||
| + | |||
| + | return response()-> | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ===== app\Http\Requests\SampleRequest.php ===== | ||
| + | < | ||
| + | <?php | ||
| + | |||
| + | namespace App\Http\Requests; | ||
| + | |||
| + | use Illuminate\Foundation\Http\FormRequest; | ||
| + | |||
| + | class SampleRequest extends FormRequest | ||
| + | { | ||
| + | public function authorize() | ||
| + | { | ||
| + | return true; | ||
| + | } | ||
| + | |||
| + | public function rules() | ||
| + | { | ||
| + | return [ | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ], | ||
| + | ]; | ||
| + | } | ||
| + | |||
| + | public function attributes() | ||
| + | { | ||
| + | return [ | ||
| + | ' | ||
| + | ]; | ||
| + | } | ||
| + | } | ||
| </ | </ | ||