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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

5233閲覧

Laravelでテーブルにカラムが見つからないという内容のエラーがでる。

Yuu412

総合スコア37

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2020/07/12 14:26

編集2020/07/15 00:30

DBにデータを追加する機能を実装しようとしているのですが、以下のようなエラーが出ます。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'professor' in 'field list' (SQL: insert into `lab_evaluation` (`professor`, `employment`, `atmosphere`, `facility`, `skill`, `add_time`, `updated_at`, `created_at`) values (3, 2, 3, 4, 4, 2020/07/12, 2020-07-12 14:20:12, 2020-07-12 14:20:12))

しかし、以下のようにデータベースにはきちんとカラムを定義しているつもりです。
どこで不具合が生じているか分かるかたはいらっしゃいますでしょうか。

2020_07_10_061812_create_lab_evaluation_table.php

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateLabEvaluationTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('lab_evaluation', function (Blueprint $table) { 17 $table->id(); 18 $table->double('professor',2,1); 19 $table->double('employment',2,1); 20 $table->double('atmosphere',2,1); 21 $table->double('facility',2,1); 22 $table->double('skill',2,1); 23 $table->date('add_time'); 24 $table->timestamps(); 25 }); 26 } 27 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('lab_evaluation'); 36 } 37} 38

データを追加するためのページ

@section('content') <!--Bootstrapの定形コード--> <div class="card-body"> <div class="card-title"> 研究室の評価 </div> </div> <!--バリテーションエラーの表示に使用--> @include('common.errors') <!--end:バリテーションエラーの表示に使用--> <!--研究室の評価の登録フォーム--> <form action="{{ url('/laboratory/{laboratory}') }}" method="POST" class="form-horizontal"> {{ csrf_field() }} <div class="form-groupe"> <div class="col-sm-6"> <label for="professor" class="col-sm-3 control-label">教授の評価</label> <input type="number" step="0.5" name="professor" class="form-control"> </div> </div> <div class="form-groupe"> <div class="col-sm-6"> <label for="employment" class="col-sm-3 control-label">就活で有利</label> <input type="number" step="0.5" name="employment" class="form-control"> </div> </div> <div class="form-groupe"> <div class="col-sm-6"> <label for="atmosphere" class="col-sm-3 control-label">雰囲気</label> <input type="number" step="0.5" name="atmosphere" class="form-control"> </div> </div> <div class="form-groupe"> <div class="col-sm-6"> <label for="facility" class="col-sm-3 control-label">研究室の設備・資金</label> <input type="number" step="0.5" name="facility" class="form-control"> </div> </div> <div class="form-groupe"> <div class="col-sm-6"> <label for="skill" class="col-sm-3 control-label">身に付くスキル・専門性</label> <input type="number" step="0.5" name="skill" class="form-control"> </div> </div> <!--研究室の評価 登録ボタン--> <div class="form-groupe"> <div class="col-offset-3 col-sm-6"> <button type="submit" class="btn btn-primary">送信する</button> </div> </div> </form> <!--現在登録済みの研究室一覧--> @endsection

他にも必要な情報があれば教えてください。


追記

web.php

1<?php 2 3use App\Laboratory; 4use Illuminate\Http\Request; 5 6//エラー表示を適切にするため 7Route::group(['middleware' => ['web']], function () 8{ 9//研究室サイトダッシュボード表示 10Route::get('/', 'LabController@index'); 11 12//研究室の追加 13Route::post('/laboratories', 'LabController@store'); 14 15//研究室の評価追加 16Route::post('/laboratory/{laboratory}', 'LabController@store_evaluation'); 17 18Route::post('/', 'LabController@mv_add'); 19 20//更新画面 21Route::post('/labedit/{laboratories}','LabController@mv_update'); 22 23//更新処理 24Route::post('/laboratories/update', 'LabController@update'); 25 26//削除処理 27Route::delete('/laboratory/{laboratory}', 'LabController@delete'); 28 29Auth::routes(); //認証機能を使用する。 30 31Route::get('/home', 'HomeController@index')->name('home'); 32 33 34//========リンク設定======================================== 35//TO:研究室の情報追加ページ 36Route::get('/add', 'LinkController@to_add'); 37 38//TO:研究室の情報追加ページ 39Route::get('/add_evaluation', 'LinkController@to_add_evaluation'); 40 41//TO:各大学ページ 42Route::get('/univ/{univ_name}','LinkController@to_univ'); 43 44//TO:各研究室ページ 45Route::get('/lab/{lab_details}','LinkController@to_lab_details'); 46}); 47

LabController(該当部のみ)

1 2 public function store_evaluation(Request $request) 3 { 4 $validator = Validator::make($request->all(), [ 5 'professor' => 'required|min:1|max:5', 6 'employment' => 'required|min:1|max:5', 7 'atmosphere' => 'required|min:1|max:5', 8 'facility' => 'required|min:1|max:5', 9 'skill' => 'required|min:1|max:5', 10 ]); 11 12 //バリテーション:エラー 13 if($validator->fails()) { 14 return redirect('/laboratory/{laboratory}') 15 ->withInput() 16 ->withError($validator); 17 } 18 19 //研究室のDBにデータを格納 20 //Eloquentモデル (=MySQL記述なしにデータベース管理をしてくれる) 21 $today = date("Y/m/d"); //現在時刻の取得 22 $lab_evaluation = new lab_evaluation; 23 $lab_evaluation->professor = $request->professor; 24 $lab_evaluation->employment = $request->employment; 25 $lab_evaluation->atmosphere = $request->atmosphere; 26 $lab_evaluation->facility = $request->facility; 27 $lab_evaluation->skill = $request->skill; 28 $lab_evaluation->add_time = $today; 29 $lab_evaluation->save(); 30 return redirect('/laboratory/{laboratory}'); 31 } 32

CREATE文の取得結果

1MariaDB [laboratory]> SHOW CREATE TABLE lab_evaluation; 2+-------------------------------------------------------------------------------------------------------------------------+ 3| Table | Create Table | 4+---------------------------------------------------------------------------------------------------------------------+ 5| lab_evaluation | CREATE TABLE `lab_evaluation` ( 6 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 7 `created_at` timestamp NULL DEFAULT NULL, 8 `updated_at` timestamp NULL DEFAULT NULL, 9 PRIMARY KEY (`id`) 10) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 11+------------------------------------------------------------------------------------------------------+ 121 row in set (0.041 sec) 13 14MariaDB [laboratory]> SHOW CREATE TABLE laboratories; 15+-------+ 16| Table | Create Table | 17+---------------------------------------------------------------------------------------------+ 18| laboratories | CREATE TABLE `laboratories` ( 19 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 20 `lab_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, 21 `lab_univ` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, 22 `lab_evaluation` double(2,1) NOT NULL, 23 `add_time` date NOT NULL, 24 `created_at` timestamp NULL DEFAULT NULL, 25 `updated_at` timestamp NULL DEFAULT NULL, 26 PRIMARY KEY (`id`) 27) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | 28+---------------------------------------------------------------------------------------------------------------------+ 291 row in set (0.004 sec)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2020/07/12 15:05

コントローラーも記載して下さい
Yuu412

2020/07/14 05:56

追加いたしました。よろしくお願いします。
yuki84web

2020/07/14 13:53

コントローラーでモデルの呼び出しをしていない、なんてことないですよね
Yuu412

2020/07/15 00:29

use App\Laboratory; use App\lab_evaluation; このような形で呼び出していると思います。
guest

回答2

0

そもそも

SQL

1SELECT * FROM テーブルA INNER JOIN テーブルB ON テーブルA.カラムA = テーブルB.カラムB 2

のようなテーブルとテーブルを繋げるSQL文を書いていませんでした。

投稿2020/07/15 04:19

Yuu412

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/07/15 06:12

Laravelを使う人でもSQLはきちんと勉強した方が不幸になる人は少なくなります。
guest

0

ベストアンサー

Column not found: 1054 Unknown column 'professor' in 'field list'

professor なんて列はないよ、って怒られています。

エラーメッセージ中のINSERT文だけ見ると、

SQL

1-- 見易さのため改行 2insert into `lab_evaluation` (`professor`, `employment`, `atmosphere`, `facility`, `skill`, `add_time`, `updated_at`, `created_at`) 3values (3, 2, 3, 4, 4, 2020/07/12, 2020-07-12 14:20:12, 2020-07-12 14:20:12) 45insert into `lab_evaluation` (`professor`, `employment`, `atmosphere`, `facility`, `skill`, `add_time`, `updated_at`, `created_at`) 6values (3, 2, 3, 4, 4, '2020/07/12', '2020-07-12 14:20:12', '2020-07-12 14:20:12')

列名や各列のデータ型や桁数を明示するためにも質問に CREATE TABLE文も提示されていた方が適切なコメントが付き易いです。

投稿2020/07/12 17:40

編集2020/07/14 06:25
Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuu412

2020/07/14 06:03

CREATE TABLE文を使ってテーブルを作成していないため、代わりにテーブルを表示するコマンドを打ったときの様子を添付しています。意図された内容と違うようであれば申し訳ありませんが、教えていただきたいです。
Orlofsky

2020/07/14 06:28

`lab_evaluation`へのiINSERT は `professor`, `employment`, `atmosphere`, `facility`, `skill`, `add_time`, `updated_at`, `created_at` で記述されていますが、提示されているテーブル定義には存在しないカラムがいくつもあるのをテーブルを修正するか、INSERT文を修正してください。
Orlofsky

2020/07/14 06:30

[MariaDB]タグを追加してください。
Yuu412

2020/07/14 07:59

まず、指摘していただいた修正点は修正しました。 >>提示されているテーブル定義には存在しないカラムがいくつもある 質問内の2つ目のコードで、カラムを定義しているつもりだったのですが、あの記述では定義できていないということでしょうか。
Orlofsky

2020/07/14 08:21 編集

CREATE TABLE があるので DESC は削ってください。情報が意味なく重複するのは無駄です。 SHOW CREATE TABLE lab_evaluation で表示されたのが実際のテーブル定義です。 最初に以下の3列でCREATE TABLEを実行して、 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, DROP TABLE lab_evaluation ; を実行しないから、次以降のCREATE TABLE lab_evaluationは既に同名のテーブルがあるからエラーになっているのでは?
Yuu412

2020/07/15 00:33

2つ目のコードで、Schema::dropIfExists('lab_evaluation');とあると思うのですが、ここでDROP TABLEしていると思います。認識が間違っていれば申し訳ございません。また、質問の修正箇所を指摘していただいてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問