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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

2953閲覧

laravelでmigrationに失敗します

naoki_m

総合スコア29

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/11/27 04:11

前提・実現したいこと

お世話になります。
Laravelでmigrationを試みたところ、下記のエラーが発生しました。
現象としては、マイグレーションはされるものの、10近くあるテーブルのうち、上から二つ目のtransacationテーブルまでしかテーブルが作られず、また、transacationテーブルのカラムに’transacation_id'が存在せず、代わりに'way'がAUTO_INCREMENTとなっています。

主キーが原因かと思い、$table->primary()で指定したり、->unsigned(); を付けてみたり、idの名前を'transacation-id'から'id'に変更したりと、色々試しましたが、どれも上手くいきませんでした。
ご助力お願いいたします。

発生している問題・エラーメッセージ

In Connection.php line 664: SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key (SQL: create table `transa ctions` (`transacation-id` int unsigned not null auto_increment primary key, `user-id` int not null, `item_id` int null, `way` int not null auto_increment primary key, `fluctua tion_point` int not null, `total_point` int not null, `created_at` datetime null, `updated_at` datetime null) default character set utf8mb4 collate utf8mb4_unicode_ci)
In Connection.php line 458: SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

該当のソースコード

php

1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateTransactionsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 15 public function up() 16 { 17 Schema::create('transactions', function (Blueprint $table) { 18 $table->increments('transacation-id')->unsigned(); 19 $table->integer('user-id'); 20 $table->integer('item_id')->nullable(); 21 $table->integer('way', 3); 22 $table->integer('fluctuation_point'); 23 $table->integer('total_point'); 24 $table->dateTime('created_at')->nullable(); 25 $table->dateTime('updated_at')->nullable(); 26 }); 27 } 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('transactions'); 36 } 37} 38

補足情報(FW/ツールのバージョンなど)

larval (v5.5.28)
PHP(7.1)

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

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

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

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

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

guest

回答2

0

$table->increments('transacation-id')->unsigned();

increments は、「符号なしINTを使用した自動増分ID」なので、 ->unsigned() を消すとどうなるでしょうか?

あと、transacation-id は、プライマリーキーですか?

プライマリーキーの名前を変えるのであれば、

protected $primaryKey = 'transacation-id';

も必要かな。

投稿2018/11/27 05:16

編集2018/11/27 05:19
CHERRY

総合スコア25171

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

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

naoki_m

2018/11/27 05:23

ご回答ありがとうございます! ->unsigned()を消して試しましたが、失敗しました。 『protected $primaryKey = 'transacation-id'; 』 こちらも記載して試したのですが、効果はなかったです。
guest

0

自己解決

ふたつ目のエラーに、『transactionテーブルがすでに存在している』と記載があったので、migrate:refreshで本来はドロップされるはずなのに、なんらかの原因で出来なかったのではないかと予想し、sqlからテーブルを手動で削除した後に、再びmigrateを試みたところ、何の問題もなく成功しました。
原因は不明です。

投稿2018/11/27 05:20

naoki_m

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問