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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

4278閲覧

Laravelでmigrateができない

tarofess

総合スコア127

PHP

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

Laravel 5

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

0グッド

3クリップ

投稿2018/02/04 22:45

編集2018/02/04 22:46

一度migrateでテーブルを作ったのですが、テーブルにカラムを追加してphp artisan migrateのコマンドを実行すると、
「Cannot declare class CreateUsersTable, because the name is already in use」
というエラーが出てきます。
しかもカラムを追加したのはCreateArticlesTableなのに、エラーではCreateUsersTableが云々と言っています。
現在ローカルで開発しており、ローカルのデータベースを見てもusersテーブルは存在していません。
なぜこのようなエラーが表示されているのでしょうか?
また、CreateUsersTableを消すにはどうすればいいでしょうか?
マイグレーション用のファイルにはupとdownのメソッドが二つ用意されており、upはphp artisan migrateで実行されると思うのですが、downの使い方が分かりません。
CreateUsersTableを消せばもしかしたらいけるのではと思っているので、downの使い方も教えていただきたいです。

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

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

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

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

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

CHERRY

2018/02/04 23:09

CreateArticlesTable しか追加していないと言われても 回答者はあなたのパソコンが見れませんのでわかりません。実際に記載しているソースコードを具体的に提示してください。また、参考にされているWebサイトや書籍があれば、記載してください。
masaya_ohashi

2018/02/05 00:09 編集

migrationファイルはどうやって作りましたか?php artisan make:migration create_xxx_tableといったコマンドで生成しましたか?それとも既存のファイルをコピペで作成しましたか?とくにコピペをしていないかが気になります。
tarofess

2018/02/05 02:45

今手元にソースコードがなくて提示できないのですが、多分usersという名前のテーブルを作成しようとしているからなんじゃないかと思っています。Laravelでは認証用に既にusersというテーブルが作成されているらしいからです。なのでちょっと帰宅したら別の名前でテーブルを作ってみます。マイグレーションファイルはphp artisan make:migration create_xxx_tableのコマンドで全て作成しています。
guest

回答1

0

ベストアンサー

おそらく「Laravelでは認証用に既にusersというテーブルが作成されているらしいからです。」のとおり、「CreateUsersTable」というクラス名がLaravelのauthで既に作成されているからです。そこで新しくphp artisan make:migration create_users_tableで作成した場合、全く同じ名前のクラス名が2個出来てしまうため、Cannot declare class CreateUsersTable, because the name is already in useというエラーが発生するようになります。既存のusersテーブルを編集するのであればalter_users_table等に名前を変えて作成してみてください。

ちなみにupとdownの使い方はこんな感じです。

PHP

1 public function up() 2 { 3 // usersテーブルをupで「作る」 4 Schema::create('users', function (Blueprint $table) { 5 $table->increments('id'); 6 $table->string('name'); 7 $table->string('email')->unique(); 8 $table->string('password'); 9 $table->rememberToken(); 10 $table->timestamps(); 11 }); 12 } 13 public function down() 14 { 15 // usersテーブルをdownで「削除する」 16 Schema::dropIfExists('users'); 17 }

このように、「更新処理」と「ロールバック処理」が対になるようにupとdownを作ります。カラムを追加したらカラムの追加を対で作り、カラムの変更をしたら元に戻す処理を対で作るようなかんじです。

投稿2018/02/05 03:26

masaya_ohashi

総合スコア9206

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

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

tarofess

2018/02/05 03:34

ご回答ありがとうございます。やはり既にusersテーブルが存在しているからなのですね。 テーブル名を変更してマイグレーションを実行したいと思います。 「更新処理」と「ロールバック処理」について質問なのですが、「更新処理」は php artisan migrate で、ロールバック処理は php artisan migrate:rollback で実行するという認識でよろしいでしょうか?
masaya_ohashi

2018/02/05 04:12

> テーブル名を変更してマイグレーションを実行したいと思います。 重要なのは生成されたマイグレーションファイルのクラス名です。クラス名が他のクラス名とダブらないように注意してください。 > 認識でよろしいでしょうか? そうです。migrateは「前回migrateした地点以降に追加されたmigrationのupを順番に行う」処理で、migrate:rollbackは「最後のmigration1個分元に戻す」という処理です。rollbackには数字が指定でき、何個分元に戻すかを指定できます。例えば create_a_table create_b_table create_c_table まで作成して、migrateを実行するとa,b,cのupが実行されます。 ここで新しくmigrationファイルdを作成して、 create_d_table この状態でmigrateを行うと、dのupが実行されます。 ここからmigrate:rollbackを行うと、dのdownが実行されます。 ここから更にmigrate:rollbackを行うと、a,b,cのdownが実行されます。 dbのmigrationsテーブルを見ると、どこまで実行されて、rollbackするとどこまで下がるのかがなんとなく分かるかと思います。参考リンクを置いておきます。 https://qiita.com/qiita-kurara/items/9a34f97a184a1d8c1c35#migraterollback
tarofess

2018/02/05 05:00

なるほど、マイグレーションを実行していくとそういう動作になるのですね。 マイグレーションの理解がかなり深まりました。詳細な解説誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問