質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

受付中

laravelexcel DBへimport時エラーになる

tamado
tamado

総合スコア0

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0回答

0評価

0クリップ

250閲覧

投稿2022/04/27 05:57

編集2022/04/30 09:23

Amazon linux 2 AMI上で、
laravel 6のアプリケーションを作成しています。
DBは、mysql(Ver 15.1 Distrib 10.2.38-MariaDB, for Linux (x86_64) using EditLine wrapper)

やりたいことは、CSVの内容をDBのテーブルにインサートしたいのです。
Maatwebsite/Excel 3.1を導入し、下記のようなコードを書いたのですが、エラーが出てしまいます。
(※ちなみに、windowsのxampp環境では、上手く行っております。)

【エラー内容】

SQLSTATE[HY000]: General error: 1364 Field 'month' doesn't have a default value (SQL: insert into Service_summariesImport (updated_at, created_at) values (2022-04-27 02:47:09, 2022-04-27 02:47:09))_

【インポート用のCSV】

※ExcelのCSV形式で保存。文字コードはUTF-8。ヘッダは無し。

CSV

202201,900011,900001,111,10,1000000 202201,900011,900001,112,20,2000000

【ソースコード】

Service_summary.php(モデル)

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Service_summary extends Model { protected $fillable = [ 'month', 'hoken_number1', 'hoken_number2','service_code', 'user_number', 'sum', ]; }

Service_summariesImport.php(インポート)

<?php namespace App\Imports; use App\Service_summary; use Maatwebsite\Excel\Concerns\ToModel; class Service_summariesImport implements ToModel { /** * @param array $row * * @return \Illuminate\Database\Eloquent\Model|null */ public function model(array $row) { return new Service_summary([ 'month' => $row[0], 'hoken_number1' => $row[1], 'hoken_number2' => $row[2], 'service_code' => $row[3], 'user_number' => $row[4], 'sum' => $row[5] ]); } }

UploadController.php(コントローラ・抜粋)

foreach($_POST['chkbox'] as $value){ // zipファイルを解凍する $zip = new ZipArchive(); $zip_path = $upload_path . DIRECTORY_SEPARATOR . $value; //$zip_path = $upload_path . '\\' . $value; $result = $zip->open($zip_path); if($result === TRUE) { $zip->setPassword('test'); if($zip->extractTo($extract_path) === TRUE){ // csvファイルをDBへ登録する for($i = 0; $i < $zip->numFiles; $i++){ $file_name = $zip->getNameIndex($i); $file_path = $extract_path . DIRECTORY_SEPARATOR . $file_name; $import = new Service_summariesImport(); Excel::import($import, $file_path); // インポート用のコード } }

migrationファイル

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateServiceSummariesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('service_summaries', function (Blueprint $table) { $table->bigIncrements('id'); $table->timestamps(); $table->integer('month'); $table->integer('hoken_number1'); $table->integer('hoken_number2'); $table->string('service_code'); $table->integer('user_number'); $table->bigInteger('sum'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('service_summaries'); } }

【試したこと】

調査し次のような手を打ちましたが、全てうまく行きませんでした。

①migrationファイルで、NGとなるカラム名をNULL許可にした。

 $table->integer('カラム名')->nullable();

 →冒頭エラーは解消されたがDBを見ると、CSVの項目がNULL値でインサートされてしまっている。

②migrationファイルで、NGとなるカラム名にデフォルト値を設定した。

 $table->integer('カラム名')->default(NN);

 →冒頭エラーは解消されたがDBを見ると、CSVの項目が入らず、全てデフォルト値がインサートされている。

③config/database.phpのstrictの値をfalseに設定した。

 →冒頭エラーは解消されたがDBを見ると、全て0の値がインサートされている。

【現在の懸念点】

残る怪しい点としては、
config/excel.phpの中身をどこか変えれば上手く行くような気がしていますが、
検討が付きません。

config/excel.php

<?php use Maatwebsite\Excel\Excel; return [  ・・前半部分Exportsは略。 'imports' => [ /* |-------------------------------------------------------------------------- | Read Only |-------------------------------------------------------------------------- | | When dealing with imports, you might only be interested in the | data that the sheet exists. By default we ignore all styles, | however if you want to do some logic based on style data | you can enable it by setting read_only to false. | */ 'read_only' => true, /* |-------------------------------------------------------------------------- | Ignore Empty |-------------------------------------------------------------------------- | | When dealing with imports, you might be interested in ignoring | rows that have null values or empty strings. By default rows | containing empty strings or empty values are not ignored but can be | ignored by enabling the setting ignore_empty to true. | */ 'ignore_empty' => false, /* |-------------------------------------------------------------------------- | Heading Row Formatter |-------------------------------------------------------------------------- | | Configure the heading row formatter. | Available options: none|slug|custom | */ 'heading_row' => [ 'formatter' => 'slug', ], /* |-------------------------------------------------------------------------- | CSV Settings |-------------------------------------------------------------------------- | | Configure e.g. delimiter, enclosure and line ending for CSV imports. | */ 'csv' => [ 'delimiter' => null, 'enclosure' => '"', 'escape_character' => '\\', 'contiguous' => false, 'input_encoding' => 'UTF-8', ], /* |-------------------------------------------------------------------------- | Worksheet properties |-------------------------------------------------------------------------- | | Configure e.g. default title, creator, subject,... | */ 'properties' => [ 'creator' => '', 'lastModifiedBy' => '', 'title' => '', 'description' => '', 'subject' => '', 'keywords' => '', 'category' => '', 'manager' => '', 'company' => '', ], ],    ・・中間略。 /* |-------------------------------------------------------------------------- | Transaction Handler |-------------------------------------------------------------------------- | | By default the import is wrapped in a transaction. This is useful | for when an import may fail and you want to retry it. With the | transactions, the previous import gets rolled-back. | | You can disable the transaction handler by setting this to null. | Or you can choose a custom made transaction handler here. | | Supported handlers: null|db | */ 'transactions' => [ 'handler' => 'db', 'db' => [ 'connection' => null, ], ], 'temporary_files' => [ /* |-------------------------------------------------------------------------- | Local Temporary Path |-------------------------------------------------------------------------- | | When exporting and importing files, we use a temporary file, before | storing reading or downloading. Here you can customize that path. | */ 'local_path' => storage_path('framework/cache/laravel-excel'), /* |-------------------------------------------------------------------------- | Remote Temporary Disk |-------------------------------------------------------------------------- | | When dealing with a multi server setup with queues in which you | cannot rely on having a shared local temporary path, you might | want to store the temporary file on a shared disk. During the | queue executing, we'll retrieve the temporary file from that | location instead. When left to null, it will always use | the local path. This setting only has effect when using | in conjunction with queued imports and exports. | */ 'remote_disk' => null, 'remote_prefix' => null, /* |-------------------------------------------------------------------------- | Force Resync |-------------------------------------------------------------------------- | | When dealing with a multi server setup as above, it's possible | for the clean up that occurs after entire queue has been run to only | cleanup the server that the last AfterImportJob runs on. The rest of the server | would still have the local temporary file stored on it. In this case your | local storage limits can be exceeded and future imports won't be processed. | To mitigate this you can set this config value to be true, so that after every | queued chunk is processed the local temporary file is deleted on the server that | processed it. | */ 'force_resync_remote' => null, ], ];

どなたかご教授頂けましたら幸いでございます。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

gU8C8Nud4E8p3uW

2022/04/27 06:16

CSVファイルを読み込んでどのようにデータを保持しているのか、そこから、データをDB格納するまでのソースコードを示してもらわないと、助言しづらいです。
tamado

2022/04/27 06:41

コメントくださり、恐れ入ります。 ソースコードを追加致しました。
phper.k

2022/04/27 08:04

CSV ファイルの文字コードが UTF-8 かどうかをチェックしましょう
tamado

2022/04/27 09:09

コメントくださり、ありがとうございます。 はい、UTF-8でした。
gU8C8Nud4E8p3uW

2022/04/28 00:19

CSVファイルを生成しているのは、Excelで形式を指定した保存なのか、他のプログラムによる出力なのか。差し障りない範囲で、CSVのほんの一部でも掲載していただけないでしょうか。
tamado

2022/04/28 00:32

コメントくださり、ありがとうございます。 Excelで形式を指定した保存です。 CSVの一部を掲載しました。 お忙しい中恐れ入りますが、宜しくお願いします。
phper.k

2022/04/29 16:56

Migrationファイル出しているんだし、 SQLSTATE[HY000]: General error: 1364 Field 'カラム名' doesn't have a default value (SQL: insert into テーブル名 (updated_at, created_at) values (2022-04-27 02:47:09, 2022-04-27 02:47:09))_ カラム名とか濁さず書いてください。
tamado

2022/04/30 00:23

コメントありがとうございます。 濁さずに書きました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。